【问题标题】:Failed to Load Custom Cell from dequeue reusable UITableViewCell无法从出列可重用 UITableViewCell 加载自定义单元格
【发布时间】:2019-03-23 16:26:39
【问题描述】:

我正在使用 xib 文件来创建自定义单元格。重用标识符在 xib 文件中设置。然后我有一个惰性变量,我只用它来注册一次 nib:

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

出于某种原因....

【问题讨论】:

  • @Sh_Khan 我认为不需要:原因是 dequeue 方法返回 nil。这足以作为有关崩溃的信息。

标签: ios swift uitableview


【解决方案1】:

有两个方法名为dequeueReusableCell

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

您使用的是第一个,并且文档清楚地说明了

返回值

UITableViewCell 对象与关联的 identifiernil(如果可重用单元队列中不存在此类对象)。


您可能想要使用后者。 换行:

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

收件人:

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

【讨论】:

    【解决方案2】:

    您需要像这样在viewDidLoad(): 方法中注册您的 nib 对象

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多