无法从出列可重用 UITableViewCell 加载自定义单元格

Posted

技术标签:

【中文标题】无法从出列可重用 UITableViewCell 加载自定义单元格【英文标题】:Failed to Load Custom Cell from dequeue reusable 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。这足以作为有关崩溃的信息。 【参考方案1】:

有两个方法名为dequeueReusableCell

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

但解包失败,应用程序崩溃。 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")

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

【讨论】:

以上是关于无法从出列可重用 UITableViewCell 加载自定义单元格的主要内容,如果未能解决你的问题,请参考以下文章

从可重用单元中出列时,自定义 CollectionViewCell 上会触发啥方法?

表视图出列可重用单元格重叠

为啥在制作自定义表格视图单元格时将可重用单元格出列两次

是否有带有标签和文本字段的可重用 UITableViewCell?

UITableView滚动式cell错位

在运行时重用具有动态布局内容的单元格