无法将 XIB 加载到可重用的 TableViewCell 中
Posted
技术标签:
【中文标题】无法将 XIB 加载到可重用的 TableViewCell 中【英文标题】:Cannot load XIB into reusable TableViewCell 【发布时间】:2020-12-12 14:53:25 【问题描述】:我创建了一个 XIB 文件及其控制器来处理我的可重复使用的自定义单元格:
并设置我的 XIB 的类所有者:
class WallTableCell: UITableViewCell
//Outlets
func setupCell()
setupLabels()
func setupLabels()
self.title.text = "Sample Title"
self.postDescriptionLabel.text = "Sample Description"
我目前有 2 个故事板,第一个故事板使用 NavigationView
连接到第二个故事板,第二个故事板包含 TabBarView
,其中第一个项目包含 TableView
。
在这里,我在情节提要中添加了UITableViewCell
单元格的类设置为:
并且控制器的类设置为:
我在哪里注册我的 Nib 并尝试在 cellForRowAt
方法上使用它:
class WallViewController: UIViewController
@IBOutlet weak var messagesTable: UITableView!
override func viewDidLoad()
loadNibForCells()
func loadNibForCells()
let nib = UINib(nibName: "WallTableCell", bundle: nil)
messagesTable.register(nib, forCellReuseIdentifier: "wallCell")
extension WallViewController: UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 1
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
guard let wallCell = messagesTable.dequeueReusableCell(withIdentifier: "wallCell") as? WallTableCell else
return UITableViewCell()
wallCell.setupCell()
return wallCell
但是,当我在模拟器中运行应用程序时,我总是得到一个空单元格。
我应该怎么做才能在我的 tableViewCell 中显示我的自定义 XIB 视图?
按照@Sh_Khan 的回答并添加后:
messagesTable.delegate = self
messagesTable.dataSource = self
应用程序因错误而崩溃:
Thread 1: Exception: "[<NSObject 0x600001628e70> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key postDescriptionLabel"
我认为这与情节提要中的TableViewCell
是空的而不是包含WallTableCell
的组件这一事实有关
【问题讨论】:
你的.setupCell()
中有什么wallCell
这是问题中的第一个代码,它只是设置标签的文本self.title.text = "Sample Title"
和self.postDescriptionLabel.text = "Sample Description"
@HarryJ
【参考方案1】:
如果需要,请确保设置数据源和委托
messagesTable.register(nib, forCellReuseIdentifier: "wallCell")
messagesTable.delegate = self
messagesTable.dataSource = self
【讨论】:
我像你一样添加了这两行,但现在我不断收到另一个错误,我认为这与我的 Storyboard 中的 TableViewCell 是空的而不是其中的组件有关。我将在问题的编辑中发布错误【参考方案2】:有一个错误:Thread 1: Exception: "[<NSObject 0x600001628e70> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key postDescriptionLabel"
,所以可能你需要解绑postDescriptionLabel
,然后再将它从xib文件绑定到swift文件。
【讨论】:
【参考方案3】:虽然我错过了添加我的 messagesTable
的数据源(这是 Sh_Khan 建议的),但后来我的错误的解决方案是我的参考出口指向“文件的所有者”而不是我的文件的出口。
所以,在选择自定义TableViewCell
(不是原型)时应该是:
由于某种原因,右侧不是“标题标签”,而是“文件的所有者”
并且原型单元不应包含任何附加到它的类。
【讨论】:
以上是关于无法将 XIB 加载到可重用的 TableViewCell 中的主要内容,如果未能解决你的问题,请参考以下文章
无法从出列可重用 UITableViewCell 加载自定义单元格