目前對於這個電影App還算是有個模糊的雛形,必須要先為這個樣子給打底
因為要使用Xib的方式建立,所以在選單選擇建立UIViewController with Xib
那麼為什麼不用UITableViewController直接建立?
也沒什麼就算是一個習慣
Xib中建立一個tableView然後拉@IBOutlet
應該會長得像這樣
@IBOutlet weak var tableView: UITableView!
像我的習慣會是
@IBOutlet weak var tableView: UITableView! {
didSet {
tableView.delegate = self
tableView.dataSource = self
// 自定義Func,來在tableView註冊該cell
// 自定義Func在下面
tableView.register(forCellReuseIdentifiers: [
String(describing: ExampleTableViewCell.self)
]))
}
}
可以寫在Extension內開放給UITableView使用
public func register(forCellReuseIdentifiers: [String]) {
for item in forCellReuseIdentifiers {
self.register(UINib(nibName: item, bundle: nil), forCellReuseIdentifier: item)
}
}
建議可以寫在Extension內部,這樣上方不會那麼亂
class ExampleTableViewController: UIViewController {
}
extension ExampleTableViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// 根據前天寫說的 ViewModel架構,此時的data來源應該是ViewModel
return viewModel.dataList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// 會從ViewModel內部取得每個Cell的資料
let dataList = viewModel.dataList[indexPath.row]
let cell: ExampleTableViewCell = tableView.dequeueReusableCell(withIdentifier: String(describing: ExampleTableViewCell.self), for: indexPath) as? ExampleTableViewCell
return cell
}
}
這樣就完成這次的打底
坑:
之前踩過一個坑,在register的時候一直沒看清楚Doc要的是什麼,所以填上錯誤的型別,但是因為他沒有報錯所以也就沒有發現,只發現他一直建立不起來.....
也常常會忘記要去register