使用用户定义的单元格以编程方式创建UITableViewController

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元素.同一个类也用在另一个地方.

Bal*_*ave 5

如果您的自定义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)