①これをしなければ、コードがtableViewに反映されないということは分かるのですが、
どのような意味があるのでしょうか。
delegate, dataSource を設定しなければ、tableView の枠を表示したあとの表示するべきセルの個数の計算、個別のセルの表示やセルを選択したときの動作などを設定することができませんし、仮にコードで設定してもそれを反映させることもできません。
ちなみに、teratail で「UITableView, UICollectionView (のセルの中身)が表示されない」という質問の多くは、これら delegate や dataSource の設定漏れです。
②コードで表すとしたらどのように表せばいいでしょうか。
過去のご質問
- [TableViewのcellForRowAtでエラーが出ます。
](https://teratail.com/questions/242391)
を拝見しました。
そこで提示されているコードで設定している通りとなります。
具体的に指摘すれば、tableView へのアウトレットを
Swift
1 @IBOutlet var tableView: UITableView!
と設定したのであれば、viewDidLoad()
などで
Swift
1 tableView.delegate = self
2 tableView.dataSource = self
と記述する方法が多いかと思います。
ただし、self
の部分は delegate や dataSource をどのクラスで設定するのかによって、違うインスタンスを設定する場合もあります。
また、「TableViewCellのIdentifierを設定」のところで、こちらもまたコードとtableViewCellを繋ぐ行為だということは分かるのですが、③register(_:forCellReuseIdentifier:)を使用する場合、どのようなコードを書けばよろしいでしょうか。
第一引数でクラスを求められるので、1からセルに対応するクラスを作ることになるのでしょうか。
これも過去のご質問
- [TableViewのcellForRowAtでエラーが出ます。
](https://teratail.com/questions/242391)
で提示されているコードの中でご自身が設定されています。
そこでは
Swift
1
2 tableView.register(UINib(nibName: "ShopCell1", bundle: nil), forCellReuseIdentifier: "ShopCell1")
という具合に設定されていますので、このような記述となります。
ちなみに、上記の場合は xib でカスタムセルを設定する方法となります。
もし、Table View Cell を使ってカスタムセルを記述するのであれば、上記の設定は不要で、StoryBoardでカスタムセルと Reuse Identifier を設定すれば
Swift
1 let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
のような感じでセル生成時に(具体的にはtableView(_:cellForRowAt:)
で)設定することとなります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。