UITableViewをコードで実装する最速の方法

UITableViewでリスト表示を実装するさい、よくやるやり方は、StoryboardやXibファイルでCellを作って、そのidentifierをView Controllerで指定する方法です。 ですが、UITableViewCell標準の表示で十分な場合にファイルが分かれるのは面倒です。 なんとかコードで済ます方法がないかと探したらありましたのでご紹介します。

UITableViewをコードで実装する最速の方法

UITableViewでリスト表示を実装するさい、よくやるやり方は、StoryboardやXibファイルでCellを作って、そのidentifierをView Controllerで指定する方法です。

ですが、UITableViewCell標準の表示で十分な場合にファイルが分かれるのは面倒です。

なんとかコードで済ます方法がないかと探したらありましたのでご紹介します。

検証環境

  • Xcode 12.2
  • iOS 14.2

やりたいこと

  • StoryboardやXibファイルは作成しない
  • レイアウトはUITableViewCellでできる範囲でカスタマイズは一切しない

結果

この3つの手順を踏まえれば標準のUITableViewCellでのリスト表示ができそうでした。

  • UITableViewControllerを継承したクラスを作る
  • viewDidLoadregisterメソッドでUITableViewCellを登録
  • tableView(_:cellForRowAt:)デリゲートメソッドでcellのレイアウトを調整
final class MyTableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = "home"
        cell.accessoryType = .disclosureIndicator // > 表示
        cell.textLabel?.numberOfLines = 0 // これを設定しないと文字数が多くなった時に改行しない
        return cell
    }

結果の表示はこちら。

mytableviewcell

ひとつのファイルでリスト表示ができて満足です。

参考文献

宣伝

インプレスR&D社より、「1人でアプリを作る人を支えるSwiftUI開発レシピ」発売中です。
「SwiftUIでアプリを作る!」をコンセプトにSwiftUI自体の解説とそれを組み合わせた豊富なサンプルアプリでどんな風にアプリ実装すればいいかが理解できる本となっています。
iOS 14対応、Widgetの作成も一章まるまるハンズオンで解説しています。
SwiftUIを学びたい方、ぜひこちらのリンクをチェックしてください!




https://nextpublishing.jp/book/12491.html