无法从出列可重用 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
对象与关联的identifier
或nil
(如果可重用单元队列中不存在此类对象)。
您可能想要使用后者。 换行:
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 上会触发啥方法?