从 Xib 加载的 UITableViewCell 始终具有 Nil 值
Posted
技术标签:
【中文标题】从 Xib 加载的 UITableViewCell 始终具有 Nil 值【英文标题】:UITableViewCell loaded from Xib always has Nil values 【发布时间】:2019-11-14 19:42:59 【问题描述】:这是我的表格视图代码:
import UIKit
import Firebase
class HomeViewController: UITableViewController
@IBOutlet weak var labelCell: IconAndTitleTableViewCell!
override func viewDidLoad()
super.viewDidLoad()
self.tableView.register(UINib(nibName: "IconAndTitleTableViewCell", bundle: nil), forCellReuseIdentifier: "iconAndLabelCell")
labelCell.titleView.text = "Test"
这是表格视图:
这是 Xib 文件:
但我不断收到错误:
线程 1:致命错误:在隐式展开可选值时意外发现 nil
尝试设置 labelCell 时。
它的字段为零。但为什么他们是零?我已经清楚地在桌子上注册了它。
【问题讨论】:
您在代码中的哪一点出现错误? labelCell.titleView.text = "测试" 此时您还没有实例化 labelCell。您已将其注册为动态单元格以供重复使用,仅此而已。您似乎正在混淆动态和静态单元格。方法签名中有一条线索表明这是动态的 -forCellReuseIdentifier
- 因为重用与静态单元格无关。如果您在 IB 而不是 XIB 中完成了单元格,这将起作用。
【参考方案1】:
您无法创建IBOutlet
的可重用元素,例如单元格。
你需要:
符合UITableViewDataSource
委托方法并实现他所有需要的方法
例如:
func numberOfSections(in tableView: UITableView) -> Int
return 1
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 1
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "", for: indexPath)
return cell
你可以在cellForRowAt
方法中访问你的单元格
【讨论】:
【参考方案2】:NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"iconAndLableCell" owner:self options:nil];
labelCell = [topLevelObjects objectAtIndex:0];
labelCell.titleView.text = @"Test";
【讨论】:
以上是关于从 Xib 加载的 UITableViewCell 始终具有 Nil 值的主要内容,如果未能解决你的问题,请参考以下文章
从 Xib 加载的 UITableViewCell 始终具有 Nil 值
我可以直接从具有特定大小类或特征集合的 xib 加载 UITableViewCell 吗?
无法从出列可重用 UITableViewCell 加载自定义单元格