Table Viewでセルを構成するには、Built-In Style、Custom Style
13511 ワード
今日はtable viewに入るセルをどのように構成するかを書きます.
その前にtableviewとは何かを簡単に理解して、
テーブルビューは、階層データを表すときにナビゲーションコントローラとよく使用されます.
表ビューを作成する際に考慮する4つの要因
UItableView→テーブルの基本外観を管理します.
UITableViewCell→実際のコンテンツを管理します.
UItableViewDataSource->ユニットにアクセスするコンテンツを管理します.
UItableViewDelegate->イベント発生時に発生するイベントを管理します.
このうち、今日はUItableViewセルについてご紹介します.
cellでテーブルのrow外観を定義できます.
セルはUItableViewCellオブジェクトによって作成されます.テンプレートの感覚を定義
cellもビューで、ビューにはサブビュー、セル内のlabel、image viewなどが含まれます.
表に入るセルを作成するには、2つの方法があります.
A.アップルが提供する基本ユニットテンプレートの使用->廃棄
B.カスタムユニットを直接定義して使用する
ビュープロファイルまたはビュープロファイルを作成し、インタフェースにビュー、ビューユニットを追加する .原型機任意指定様式 プロパティ・アイテムセルの識別子を指定
ビュー付きプロファイルまたはビュープロファイルを作成し、ビュー付き、ビュー付きユニットをインタフェースに追加します.
プロトタイプユニットのスタイルをcustomに指定
attributeアイテムでセルの識別子を指定する
プロトタイプ・セルの表示(ボタン、ラベル...)制約を追加します
Inspectorエントリでセルのクラスを指定
5で指定したクラスを定義します.(UItableViewClassファイルを作成)
このとき、4に追加したすべてのボタンまたはラベルをIBOUTに接続します.静的ビューラベルまたはimageViewなどの構成 を使用する.のパフォーマンスを低下させるためにユーザのインタラクションを必要とするビューをできるだけ避ける
では、このように定義されたユニットはどこで使われているのでしょうか.
UItableViewControlは、UItableViewDataSourceのCellForRowAtメソッドで使用する限り、UItableViewDataSourceプロトコルを自動的に採用します.
UItableViewCellとしてのProperty
textLabel、detailTextLabel、imageViewの使用
この場合、先ほどビューで指定したスタイルに基づいてアイテムが設定されます.
たとえば、スタイルにimageViewがない場合、ここでimageViewを指定すると、ビューに反映されません.
Customユニットを使用する場合、dequeueReusableCellメソッドを使用する場合は、ドロップダウン鋳造を行う必要があります.
次に、先ほど定義したクラスのIBoutletにデータを割り当てます.
前に説明しなかったC次方法は、デフォルトスタイルで実装されたセルを取得し、設定値を変更してセルに再割り当てすることです.この方法もアップルのドキュメントに現れて、いい方法ですね.まず、B号を使いましょう.
Reference
Configuring the Cells for Your Table
[Swift 5]Table Viewの作成(カスタムセルの作成)
その前にtableviewとは何かを簡単に理解して、
テーブルビューは、階層データを表すときにナビゲーションコントローラとよく使用されます.
表ビューを作成する際に考慮する4つの要因
UItableView→テーブルの基本外観を管理します.
UITableViewCell→実際のコンテンツを管理します.
UItableViewDataSource->ユニットにアクセスするコンテンツを管理します.
UItableViewDelegate->イベント発生時に発生するイベントを管理します.
UITableViewCell
このうち、今日はUItableViewセルについてご紹介します.
cellでテーブルのrow外観を定義できます.
セルはUItableViewCellオブジェクトによって作成されます.テンプレートの感覚を定義
cellもビューで、ビューにはサブビュー、セル内のlabel、image viewなどが含まれます.
表に入るセルを作成するには、2つの方法があります.
A.アップルが提供する基本ユニットテンプレートの使用->廃棄
B.カスタムユニットを直接定義して使用する
セルの作成順序
A.アップルが提供する基本テンプレートを使う
B.カスタムユニットを定義し、自分のテンプレートを使用する場合
ビュー付きプロファイルまたはビュープロファイルを作成し、ビュー付き、ビュー付きユニットをインタフェースに追加します.
プロトタイプユニットのスタイルをcustomに指定
attributeアイテムでセルの識別子を指定する
プロトタイプ・セルの表示(ボタン、ラベル...)制約を追加します
Inspectorエントリでセルのクラスを指定
5で指定したクラスを定義します.(UItableViewClassファイルを作成)
class FoodCell: UITableViewCell {
@IBOutlet var name : UILabel?
@IBOutlet var plantDescription : UILabel?
@IBOutlet var picture : UIImageView?
}
*カスタムユニットを作成する際の注意事項セルの使用
では、このように定義されたユニットはどこで使われているのでしょうか.
UItableViewControlは、UItableViewDataSourceのCellForRowAtメソッドで使用する限り、UItableViewDataSourceプロトコルを自動的に採用します.
A.アップルが提供する基本テンプレートを使う
UItableViewCellとしてのProperty
textLabel、detailTextLabel、imageViewの使用
この場合、先ほどビューで指定したスタイルに基づいてアイテムが設定されます.
たとえば、スタイルにimageViewがない場合、ここでimageViewを指定すると、ビューに反映されません.
override func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// 다운캐스팅 안해도됨
let cell = tableView.dequeueReusableCell(withIdentifier: "basicStyle", for: indexPath)
// For a standard cell, use the UITableViewCell properties.
cell.textLabel!.text = "Title text"
cell.imageView!.image = UIImage(named: "bunny")
return cell
}
B.カスタムユニットを定義し、自分のテンプレートを使用する場合
Customユニットを使用する場合、dequeueReusableCellメソッドを使用する場合は、ドロップダウン鋳造を行う必要があります.
次に、先ほど定義したクラスのIBoutletにデータを割り当てます.
override func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// 여기서 다운캐스팅을 해줘야한다-> 만들어준 커스텀셀을 가져와서 밑에서 그 프로퍼티에 접근하기위해!!!
let cell = tableView.dequeueReusableCell(withIdentifier: "foodCellType",
for: indexPath) as! FoodCell
// Fetch the data for the row.
let theFood = foods[indexPath.row]
// Configure the cell’s contents with data from the fetched object.
cell.name?.text = theFood.name
cell.plantDescription?.text = theFood.description
cell.picture?.image = theFood.picture
return cell
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "testIdentifier", for: indexPath) as? CustomTableViewCell else { return CustomTableViewCell() }
// A 프로토타입 셀의 요소를 쓰는 것 -> 오류
// cell.textLabel?.text = "안녕하세요 " + asset[indexPath.row] + "행 입니다."
// cell.imageView?.image = UIImage(systemName: "circle")
// B 수박 추천 방법) 커스텀 셀에서 만들었던 IBOutlet을 쓰는 것 -> 이거하기 위해 다운캐스팅 해주는 듯
let camperAsset = jsonParser()
cell.myLabel.text = camperAsset[indexPath.row].nicName
cell.pointLabel.text = camperAsset[indexPath.row].yagomPoint.description
// C 애플문서에 나온 방법) 커스텀 셀을 안만들고 하는 방법 -> 됨
// var content = cell.defaultContentConfiguration()
// content.text = "안녕하세요 " + asset[indexPath.row] + "행 입니다."
// content.image = UIImage(systemName: "circle")
//
// cell.contentConfiguration = content
// cell.showsReorderControl = true
return cell
}
カスタムユニットを実装する場合は、B番メソッドのカスタムユニットから接続されたIBOUTを取得することが望ましい.前に説明しなかったC次方法は、デフォルトスタイルで実装されたセルを取得し、設定値を変更してセルに再割り当てすることです.この方法もアップルのドキュメントに現れて、いい方法ですね.まず、B号を使いましょう.
var content = cell.defaultContentConfiguration()
// Configure content.
content.image = UIImage(systemName: "star")
content.text = "Favorites"
// Customize appearance.
content.imageProperties.tintColor = .purple
cell.contentConfiguration = content
UIListContentConfiguration Reference
Configuring the Cells for Your Table
[Swift 5]Table Viewの作成(カスタムセルの作成)
Reference
この問題について(Table Viewでセルを構成するには、Built-In Style、Custom Style), 我々は、より多くの情報をここで見つけました https://velog.io/@dev_jane/Table-View의-Cell을-Configure하는-방법-Built-In-Style-Custom-Styleテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol