Mar*_*rry 0 uitableview ios swift
我以UITableViewController编程方式创建viewDidLoad():
resultsController = UITableViewController(style: UITableViewStyle.plain)
resultsController.tableView.register(MyTableCellTableViewCell.self, forCellReuseIdentifier: "userFoundCell")
resultsController.tableView.dataSource = self
resultsController.tableView.delegate = self
Run Code Online (Sandbox Code Playgroud)
但是,当我以后这样做
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell: MyTableCellTableViewCell? = tableView.dequeueReusableCell(withIdentifier: "userFoundCell", for: indexPath) as? MyTableCellTableViewCell
if (cell == nil){
cell = MyTableCellTableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "userFoundCell")
}
cell!.lblTmp!.text = "test"
return cell!
}
Run Code Online (Sandbox Code Playgroud)
cell 从来没有,我测试过它
代码崩溃:
致命错误:在单元格中展开可选值时意外发现nil!.lblTmp!.text ="test"
我MyTableCellTableViewCell看起来像这样
class MyTableCellTableViewCell: UITableViewCell {
@IBOutlet var lblTmp: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
Run Code Online (Sandbox Code Playgroud)
IBoutlet在Interface Builder中连接到GUI元素.同一个类也用在另一个地方.
如果您的自定义tableview单元格包含xib和class,那么您应该按照以下方式注册您的单元格.
如果你有你的表视图单元格xib文件名,如"MyTableCellTableViewCell",那么替换你的行
resultsController.tableView.register(MyTableCellTableViewCell.self, forCellReuseIdentifier: "userFoundCell")
Run Code Online (Sandbox Code Playgroud)
用这条线
resultsController.tableView.register(UINib(nibName: "MyTableCellTableViewCell", bundle: nil), forCellReuseIdentifier: "userFoundCell")
Run Code Online (Sandbox Code Playgroud)