xyz-log.
トップへ戻る
Tech / 2026.01.04 2026.01.04 / 4 分 ...

完全に理解する Storyboard & UIKit (Day 16): UITableViewのカスタムセル作成

S7r1n9y

S7r1n9y

Engineer

完全に理解する Storyboard & UIKit
16 / 30
このシリーズの記事一覧
  1. 1. 完全に理解する Storyboard & UIKit (Day 1): 基礎概念と歴史
  2. 2. 完全に理解する Storyboard & UIKit (Day 2): XcodeでのStoryboardの基本操作
  3. 3. 完全に理解する Storyboard & UIKit (Day 3): UIViewControllerのライフサイクル
  4. 4. 完全に理解する Storyboard & UIKit (Day 4): Auto Layoutの基本原理
  5. 5. 完全に理解する Storyboard & UIKit (Day 5): Auto Layoutの複雑な制約の解決
  6. 6. 完全に理解する Storyboard & UIKit (Day 6): UIStackViewを使った効率的なレイアウト設計
  7. 7. 完全に理解する Storyboard & UIKit (Day 7): Size Classesによるレスポンシブデザイン
  8. 8. 完全に理解する Storyboard & UIKit (Day 8): Segueによる画面遷移とデータ渡し
  9. 9. 完全に理解する Storyboard & UIKit (Day 9): Navigation Controllerの活用
  10. 10. 完全に理解する Storyboard & UIKit (Day 10): Tab Bar Controllerの活用
  11. 11. 完全に理解する Storyboard & UIKit (Day 11): 基本的なUI部品(UILabel, UIButton, UITextField)
  12. 12. 完全に理解する Storyboard & UIKit (Day 12): UITextViewとキーボードハンドリング
  13. 13. 完全に理解する Storyboard & UIKit (Day 13): UIImageViewと画像リソース管理
  14. 14. 完全に理解する Storyboard & UIKit (Day 14): UIScrollViewとコンテンツのスクロール
  15. 15. 完全に理解する Storyboard & UIKit (Day 15): UITableViewの実装基礎
  16. 16. 完全に理解する Storyboard & UIKit (Day 16): UITableViewのカスタムセル作成
  17. 17. 完全に理解する Storyboard & UIKit (Day 17): UICollectionViewの実装基礎
  18. 18. 完全に理解する Storyboard & UIKit (Day 18): UICollectionViewのカスタムレイアウト
  19. 19. 完全に理解する Storyboard & UIKit (Day 19): Custom Viewの作成とStoryboardでの利用(@IBDesignable, @IBInspectable)
  20. 20. 完全に理解する Storyboard & UIKit (Day 20): アニメーションの実装(UIView Animation)
  21. 21. 完全に理解する Storyboard & UIKit (Day 21): Gesture Recognizerによるタッチ処理
  22. 22. 完全に理解する Storyboard & UIKit (Day 22): UIAlertControllerによるアラートとアクションシート
  23. 23. 完全に理解する Storyboard & UIKit (Day 23): UIDatePickerやUIPickerViewの実装
  24. 24. 完全に理解する Storyboard & UIKit (Day 24): Storyboard Referenceを用いたStoryboard分割
  25. 25. 完全に理解する Storyboard & UIKit (Day 25): XIBとStoryboardの使い分け・併用
  26. 26. 完全に理解する Storyboard & UIKit (Day 26): UIAppearanceによるアプリ全体の色・スタイル管理
  27. 27. 完全に理解する Storyboard & UIKit (Day 27): ダークモード対応とアセットカタログ
  28. 28. 完全に理解する Storyboard & UIKit (Day 28): Accessibility(VoiceOver対応など)のUI設計
  29. 29. 完全に理解する Storyboard & UIKit (Day 29): UIKitからSwiftUIへの移行 / UIKitでのSwiftUI利用
  30. 30. 完全に理解する Storyboard & UIKit (Day 30): 実践:1つのアプリをStoryboardとUIKitで完成させる
完全に理解する Storyboard & UIKit (Day 16): UITableViewのカスタムセル作成

Sponsored

完全に理解する Storyboard & UIKit (Day 16): UITableViewのカスタムセル作成

Day 15では、iOS標準のシンプルなテキストセルを表示させました。しかし実際のアプリでは、「左にユーザーのアイコン、右上に名前、その下にツイート本文、右端にいいねボタン」のように、複雑なレイアウトを持ったリスト行が必要です。

これを実現するのが カスタムセル(Custom UITableViewCell) の作成です。


1. カスタムセル作成の3ステップ

カスタムセルの作成には、「見た目(Storyboard)」と「裏側の設計図(Swiftファイル)」の両方を用意し、紐付ける必要があります。

ステップ1: Viewの作成(Storyboard)

  1. ViewController上のTableView内に配置した Prototype Cell を選択します。
  2. セルの高さを広げ、その中に UIImageViewUILabel を自由にドラッグ&ドロップして配置します。
  3. セルの中(Content View)で、Day 4〜6で学んだ Auto Layout または Stack View を駆使して制約をつけます。
  4. Attributes Inspector で、セルに必ず Identifier(例: CustomTweetCell)を設定します。

ステップ2: クラスファイルの作成(Swift)

見た目を操作するための専用クラスを作成します。

  1. Xcodeのメニューから File > New > File... を選択します。
  2. Cocoa Touch Class を選びます。
  3. Subclass of:UITableViewCell を指定し、名前を CustomTweetCell として保存します。

ステップ3: Storyboardとコードの紐付け

  1. 再度Storyboardを開き、作成したセルを選択します。
  2. Identity Inspector (⌥⌘3) を開き、Class にステップ2で作成した CustomTweetCell を指定します。
  3. Assistant Editorを開き、セル内のImageViewやLabelから CustomTweetCell クラスへ、IBOutlet を接続します。
swift
// CustomTweetCell.swift import UIKit class CustomTweetCell: UITableViewCell { @IBOutlet weak var userImageView: UIImageView! @IBOutlet weak var userNameLabel: UILabel! @IBOutlet weak var tweetContentLabel: UILabel! // セルがStoryboardからロードされた直後に呼ばれる初期化メソッド override func awakeFromNib() { super.awakeFromNib() // アイコンを丸くするなどの初期設定をここに書く userImageView.layer.cornerRadius = userImageView.frame.width / 2 } }

2. ViewController側でのセルの呼び出し

セルの準備ができたら、Day 15で実装した cellForRowAt メソッドを修正して、このカスタムセルを呼び出します。

swift
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // 1. Identifierを指定し、as? を使って自作クラスの型にキャスト(変換)する guard let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTweetCell", for: indexPath) as? CustomTweetCell else { return UITableViewCell() } // 2. 自作クラスのIBOutletにアクセスしてデータをセットする let tweet = tweetList[indexPath.row] cell.userNameLabel.text = tweet.userName cell.tweetContentLabel.text = tweet.content cell.userImageView.image = UIImage(named: tweet.imageName) return cell }

※ Day 15で使用した defaultContentConfiguration() は標準デザイン専用の機能なので、カスタムセルの場合は従来通り直接IBOutletのプロパティ(.text など)に代入を行います。


3. 高度なテクニック: セルの高さの自動計算

カスタムセルの中に、複数行のテキスト(長文)を表示するラベル(Lines = 0)がある場合、文字数によってセルの高さを動的に変えなければなりません。

昔のiOS開発では文字数から高さを手動計算するという地獄の苦しみがありましたが、現在は Auto Layoutの機能(Self-Sizing Cells)によって自動化されています。

自動計算(Self-Sizing)を有効にする条件

セル内の要素が、セルのTopからBottomまで、Auto Layoutの制約で隙間なく(またはStack Viewで)完全に繋がっていること です。 これにより、Labelの Intrinsic Content Size(文字数による自然な高さ)がセルの外枠を押し広げるように働き、システムがセルの高さを自動算出します。

また、viewDidLoad で以下の2行が設定されていることを確認してください(iOS 11以降はデフォルトで有効になっています)。

swift
tableView.rowHeight = UITableView.automaticDimension tableView.estimatedRowHeight = 100 // ざっくりとした平均的な高さ

📝 今日のまとめ

  • 標準デザイン以外のリストを作るには、UITableViewCellを継承したカスタムクラス を作成する。
  • セルの IdentifierCustom Class の設定をStoryboard上で忘れないこと。
  • cellForRowAt メソッド内で、as? CustomCellClass でキャスト してからプロパティにアクセスする。
  • セルの高さを文字数に合わせて自動可変にするには、上下のAuto Layout制約を完全に繋ぎ切る必要がある。

これで縦スクロールの美しいリストUIが作れるようになりました。 明日の Day 17 では、TableViewの兄弟であり、縦横無尽なグリッドレイアウト(タイル状の表示など)を可能にする強力なコンポーネント UICollectionView の基礎を学びます。

END OF FILE
この記事は役に立ちましたか?
SNSでシェアする
後で読む(ブックマーク)
完全に理解する Storyboard & UIKit
16 / 30
このシリーズの記事一覧
  1. 1. 完全に理解する Storyboard & UIKit (Day 1): 基礎概念と歴史
  2. 2. 完全に理解する Storyboard & UIKit (Day 2): XcodeでのStoryboardの基本操作
  3. 3. 完全に理解する Storyboard & UIKit (Day 3): UIViewControllerのライフサイクル
  4. 4. 完全に理解する Storyboard & UIKit (Day 4): Auto Layoutの基本原理
  5. 5. 完全に理解する Storyboard & UIKit (Day 5): Auto Layoutの複雑な制約の解決
  6. 6. 完全に理解する Storyboard & UIKit (Day 6): UIStackViewを使った効率的なレイアウト設計
  7. 7. 完全に理解する Storyboard & UIKit (Day 7): Size Classesによるレスポンシブデザイン
  8. 8. 完全に理解する Storyboard & UIKit (Day 8): Segueによる画面遷移とデータ渡し
  9. 9. 完全に理解する Storyboard & UIKit (Day 9): Navigation Controllerの活用
  10. 10. 完全に理解する Storyboard & UIKit (Day 10): Tab Bar Controllerの活用
  11. 11. 完全に理解する Storyboard & UIKit (Day 11): 基本的なUI部品(UILabel, UIButton, UITextField)
  12. 12. 完全に理解する Storyboard & UIKit (Day 12): UITextViewとキーボードハンドリング
  13. 13. 完全に理解する Storyboard & UIKit (Day 13): UIImageViewと画像リソース管理
  14. 14. 完全に理解する Storyboard & UIKit (Day 14): UIScrollViewとコンテンツのスクロール
  15. 15. 完全に理解する Storyboard & UIKit (Day 15): UITableViewの実装基礎
  16. 16. 完全に理解する Storyboard & UIKit (Day 16): UITableViewのカスタムセル作成
  17. 17. 完全に理解する Storyboard & UIKit (Day 17): UICollectionViewの実装基礎
  18. 18. 完全に理解する Storyboard & UIKit (Day 18): UICollectionViewのカスタムレイアウト
  19. 19. 完全に理解する Storyboard & UIKit (Day 19): Custom Viewの作成とStoryboardでの利用(@IBDesignable, @IBInspectable)
  20. 20. 完全に理解する Storyboard & UIKit (Day 20): アニメーションの実装(UIView Animation)
  21. 21. 完全に理解する Storyboard & UIKit (Day 21): Gesture Recognizerによるタッチ処理
  22. 22. 完全に理解する Storyboard & UIKit (Day 22): UIAlertControllerによるアラートとアクションシート
  23. 23. 完全に理解する Storyboard & UIKit (Day 23): UIDatePickerやUIPickerViewの実装
  24. 24. 完全に理解する Storyboard & UIKit (Day 24): Storyboard Referenceを用いたStoryboard分割
  25. 25. 完全に理解する Storyboard & UIKit (Day 25): XIBとStoryboardの使い分け・併用
  26. 26. 完全に理解する Storyboard & UIKit (Day 26): UIAppearanceによるアプリ全体の色・スタイル管理
  27. 27. 完全に理解する Storyboard & UIKit (Day 27): ダークモード対応とアセットカタログ
  28. 28. 完全に理解する Storyboard & UIKit (Day 28): Accessibility(VoiceOver対応など)のUI設計
  29. 29. 完全に理解する Storyboard & UIKit (Day 29): UIKitからSwiftUIへの移行 / UIKitでのSwiftUI利用
  30. 30. 完全に理解する Storyboard & UIKit (Day 30): 実践:1つのアプリをStoryboardとUIKitで完成させる
Related Articles