UITableViewをコードで実装する最速の方法
UITableViewでリスト表示を実装するさい、よくやるやり方は、StoryboardやXibファイルでCellを作って、そのidentifierをView Controllerで指定する方法です。 ですが、UITableViewCell標準の表示で十分な場合にファイルが分かれるのは面倒です。 なんとかコードで済ます方法がないかと探したらありましたのでご紹介します。
UITableViewでリスト表示を実装するさい、よくやるやり方は、StoryboardやXibファイルでCellを作って、そのidentifierをView Controllerで指定する方法です。
ですが、UITableViewCell
標準の表示で十分な場合にファイルが分かれるのは面倒です。
なんとかコードで済ます方法がないかと探したらありましたのでご紹介します。
検証環境
- Xcode 12.2
- iOS 14.2
やりたいこと
- StoryboardやXibファイルは作成しない
- レイアウトは
UITableViewCell
でできる範囲でカスタマイズは一切しない
結果
この3つの手順を踏まえれば標準のUITableViewCell
でのリスト表示ができそうでした。
UITableViewController
を継承したクラスを作るviewDidLoad
でregister
メソッドで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
}
結果の表示はこちら。
ひとつのファイルでリスト表示ができて満足です。
参考文献
- UITableViewCellの再利用を知る
- UITableViewCell | Apple Developer Documentation
- デフォルトTableViewサンプル集(swift) - Qiita
宣伝
インプレスR&D社より、「1人でアプリを作る人を支えるSwiftUI開発レシピ」発売中です。
「SwiftUIでアプリを作る!」をコンセプトにSwiftUI自体の解説とそれを組み合わせた豊富なサンプルアプリでどんな風にアプリ実装すればいいかが理解できる本となっています。
iOS 14対応、Widgetの作成も一章まるまるハンズオンで解説しています。
SwiftUIを学びたい方、ぜひこちらのリンクをチェックしてください!