无法从取消排队的可重用 UITableViewCell 加载自定义单元格



我正在使用xib文件创建自定义单元格。重用标识符在 xib 文件中设置。然后我有一个懒惰的var,我只用来注册笔尖一次:

private lazy var registerNib: Bool = {
    let nib = UINib(nibName: "CustomTableViewCell", bundle: nil)
    self.tableView.register(nib, forCellReuseIdentifier: "Custom")
    return true
}()

在单元格创建期间,我只是使用了惰性 var 并从表视图中取消单元格的排队,使用与 xib 文件中相同的重用标识符:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let _ = self.registerNib
    let cell = tableView.dequeueReusableCell(withIdentifier: "Custom") as! CustomCell
    return cell
}

但是解包失败,应用程序崩溃。

tableView.dequeueReusableCell 返回 nil

出于某种原因....

有两个方法命名为 dequeueReusableCell

  • dequeueReusableCell(withIdentifier:)
  • dequeueReusableCell(withIdentifier:for:)

但是解包失败,应用程序崩溃。 tableView.dequeueReusableCell 出于某种原因返回 nil。

您正在使用第一个,并且文档清楚地表明

返回值

具有关联identifiernilUITableViewCell对象(如果可重用单元队列中不存在此类对象(。


您可能希望使用后者。更改行:

let cell = tableView.dequeueReusableCell(withIdentifier: "Custom") as! CustomCell

自:

let cell = tableView.dequeueReusableCell(withIdentifier: "Custom", for: indexPath) as! CustomCell
您需要

在这样的方法viewDidLoad():注册 nib 对象

let nib = UINib(nibName: "CustomTableViewCell", bundle: nil)
tableView.register(nib, forCellReuseIdentifier: "Custom")

另外,您是否在情节提要中设置了单元格重用标识符?

最新更新