【Xcodeのお勉強】Outlet cannot be connected to repeating contentに対応してTableViewCellサブクラスを作成する

どうにもこうにも原因がよくわからないけれどもこの方法でビルドも通ったのでメモ。

これまでの経緯は
・Outlet cannot be connected to repeating contentでoutlet接続ができないケース
・ビルドすると「nib but didn’t get a UITableView.」と言われアプリが立ち上がらないケース

この二通りだった。

NavigationControllerを使ってTableViewを生成

これまでやってきたのと違うとしたらこの工程なんだよなぁ。今までは最初にあったViewControllerにTableViewをはっつけてたけど最初から生成してくれてるNavigationControllerを使ってみた。

labelとimageviewもつける。

cellのidetifierを「item」とした。

TableViewController用のカスタムクラスを作成する

コード全文。


import UIKit

class TableViewController: UITableViewController {
var IndexArray = ["a","b","c","d","e","f"]

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

return IndexArray.count
}

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

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return IndexArray[section]
}

override func sectionIndexTitles(for tableView: UITableView) -> [String]? {
return IndexArray
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "item", for: indexPath) as! TableViewCell
cell.imgPhoto.image = UIImage(named: "apple")
cell.lblUserName.text! = "UserName"
return cell
}

}

ここで手元のViewController.swiftにoutletしようとしてもだめ。TableViewCellにカスタムクラスを定義しようとしてもだめ→恐らくUITableViewCellのサブクラスを持ってないから。

UITableViewCellのサブクラスを持つカスタムクラスを作成

TableViewCell.swiftという名前で以下作成


import UIKit

class TableViewCell: UITableViewCell {

@IBOutlet weak var imgPhoto: UIImageView!
@IBOutlet weak var lblUserName: UILabel!

}

Storyboardのitem(tableCell)にカスタムクラスとして定義させてoutletで繋ぐ。

これだと上手くいった。

この記事が気に入ったら
いいね ! しよう