1. ホーム
  2. ios

[解決済み] UITableViewのSwift用サンプル

2023-05-23 02:38:42

質問

SwiftとiOSを使い始めて数ヶ月になります。私は物事が行われる方法の多くに精通していますが、私は見ずに物事を書き上げることができるほど上手ではありません。私は過去に Stack Overflow が、私が錆び付いてしまったトピックを軌道に乗せるために迅速な回答を提供してくれたことに感謝しています (例えば。 AsyncTask Android の例 ).

iOSの UITableView は、私にとってはこのカテゴリーに入ります。何度かやったことがあるのですが、細かいところは忘れてしまいました。StackOverflowで基本的な例を求めるだけの他の質問を見つけることができず、オンラインにある多くのチュートリアルよりも短いものを探しています(ただし これ は非常に良いですが)。

私の将来の参考のため、またあなたのために、以下に回答を提供します。

どのように解決するのですか?

以下の例は 長い記事 をWe❤Swiftから適応させたものです。このような感じになります。

新しいプロジェクトを作成する

通常のSingle View Applicationでよい。

コードの追加

を置き換える ViewController.swift のコードを以下に置き換えます。

import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    // Data model: These strings will be the data for the table view cells
    let animals: [String] = ["Horse", "Cow", "Camel", "Sheep", "Goat"]
    
    // cell reuse id (cells that scroll out of view can be reused)
    let cellReuseIdentifier = "cell"
    
    // don't forget to hook this up from the storyboard
    @IBOutlet var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Register the table view cell class and its reuse id
        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
        
        // (optional) include this line if you want to remove the extra empty cell divider lines
        // self.tableView.tableFooterView = UIView()

        // This view controller itself will provide the delegate methods and row data for the table view.
        tableView.delegate = self
        tableView.dataSource = self
    }
    
    // number of rows in table view
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.animals.count
    }
    
    // create a cell for each table view row
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        // create a new cell if needed or reuse an old one
        let cell:UITableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as UITableViewCell!
        
        // set the text from the data model
        cell.textLabel?.text = self.animals[indexPath.row]
        
        return cell
    }
    
    // method to run when table view cell is tapped
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("You tapped cell number \(indexPath.row).")
    }
}

コード内のコメントを読んで、何が起こっているのかを見てみましょう。ハイライトは

  • ビューコントローラは UITableViewDelegateUITableViewDataSource プロトコルを使用します。
  • numberOfRowsInSection メソッドはテーブルビューに存在する行の数を決定します。
  • cellForRowAtIndexPath メソッドは各行を設定します。
  • didSelectRowAtIndexPath メソッドは、行がタップされるたびに呼び出されます。

ストーリーボードにテーブルビューを追加する

をドラッグして UITableView をビューコントローラにドラッグします。オートレイアウトで4辺を固定します。

アウトレットを接続する

制御 IB のテーブルビューからドラッグして tableView のアウトレットにドラッグします。

終了しました

以上です。これでアプリを実行できるはずです。

この回答は、Xcode 9とSwift 4でテストされました。


バリエーション

行削除

ユーザが行を削除できるようにしたい場合は、上記の基本プロジェクトにメソッドを1つ追加するだけです。以下を参照してください。 この基本的な例 を参照してください。

行間

行間を空けたい場合は、以下を参照してください。 この補足の例 .

カスタムセル

テーブルビューのセルのデフォルトレイアウトは、あなたが必要とするものではない可能性があります。 この例をチェックアウトする を参照して、独自のセルを作成するのにお役立てください。

動的なセルの高さ

すべてのセルが同じ高さであることを望まない場合があります。iOS 8 からは、セルの内容に応じて高さを自動的に設定することが簡単にできるようになりました。 この例を参照してください をご覧ください。

詳しい説明