无法将 XIB 加载到可重用的 TableViewCell 中
Cannot load XIB into reusable TableViewCell
我创建了一个 XIB 文件及其控制器来处理我的可重用自定义单元格:
并设置我的 XIB 的 class 所有者:
class WallTableCell: UITableViewCell {
//Outlets
func setupCell() {
setupLabels()
}
func setupLabels() {
self.title.text = "Sample Title"
self.postDescriptionLabel.text = "Sample Description"
}
}
我目前有 2 个故事板,第一个故事板通向第二个故事板,使用 NavigationView
,第二个故事板包含 TabBarView
,其中第一个项目具有 TableView
.
这里,我在storyboard里加了一个UITableViewCell
单元格的 class 设置为:
控制器的class设置为:
我在哪里注册我的 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
的组件有关
确保在需要时设置数据源和委托
messagesTable.register(nib, forCellReuseIdentifier: "wallCell")
messagesTable.delegate = self
messagesTable.dataSource = self
虽然我没有添加我的 messagesTable
的数据源,这是 Sh_Khan 推荐的,但后来我的错误解决方案是我的参考出口指向“文件所有者”而不是我的档案网点。
因此,选择自定义TableViewCell
(不是原型)时应该是:
由于某种原因,右侧不是“标题标签”,而是“文件所有者”
并且原型单元不应包含任何附加的 class。
出现错误:Thread 1: Exception: "[<NSObject 0x600001628e70> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key postDescriptionLabel"
,所以您可能需要解除绑定 postDescriptionLabel
并将其从 xib 文件重新绑定到 swift 文件。
我创建了一个 XIB 文件及其控制器来处理我的可重用自定义单元格:
并设置我的 XIB 的 class 所有者:
class WallTableCell: UITableViewCell {
//Outlets
func setupCell() {
setupLabels()
}
func setupLabels() {
self.title.text = "Sample Title"
self.postDescriptionLabel.text = "Sample Description"
}
}
我目前有 2 个故事板,第一个故事板通向第二个故事板,使用 NavigationView
,第二个故事板包含 TabBarView
,其中第一个项目具有 TableView
.
这里,我在storyboard里加了一个UITableViewCell
单元格的 class 设置为:
控制器的class设置为:
我在哪里注册我的 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
确保在需要时设置数据源和委托
messagesTable.register(nib, forCellReuseIdentifier: "wallCell")
messagesTable.delegate = self
messagesTable.dataSource = self
虽然我没有添加我的 messagesTable
的数据源,这是 Sh_Khan 推荐的,但后来我的错误解决方案是我的参考出口指向“文件所有者”而不是我的档案网点。
因此,选择自定义TableViewCell
(不是原型)时应该是:
由于某种原因,右侧不是“标题标签”,而是“文件所有者”
并且原型单元不应包含任何附加的 class。
出现错误:Thread 1: Exception: "[<NSObject 0x600001628e70> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key postDescriptionLabel"
,所以您可能需要解除绑定 postDescriptionLabel
并将其从 xib 文件重新绑定到 swift 文件。