【发布时间】:2023-03-14 00:30:02
【问题描述】:
我想在我的UITableView 中添加一些自定义部分标题,我在网上搜索并看到很多人正在创建一个UITableViewCell 子类并将其注册为标题,这听起来像一个不好的做法,因为有一个页眉和页脚的特定类称为UITableViewHeaderFooterView。
所以我尝试自己做,我创建了一个 xib 文件和一个 UITableViewHeaderFooterView 子类 - 称为 SelectedProductsSectionHeader。
这是 UITableViewController 端的相关代码-
override func viewDidLoad() {
super.viewDidLoad()
let selectedProductsSectionHeaderNib = UINib(nibName: "SelectedProductsSectionHeader", bundle: nil)
tableView.register(selectedProductsSectionHeaderNib, forHeaderFooterViewReuseIdentifier: "selectedProductsHeader")
}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if section == SectionIndex.selectedProducts{
let selectedProductsHeaderCell = tableView.dequeueReusableHeaderFooterView(withIdentifier: "selectedProductsHeader") // throws error
guard let selectedProductsHeader = selectedProductsHeaderCell as? SelectedProductsSectionHeader else { return nil }
return selectedProductsHeader
}
return nil
}
运行时错误:
由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合键标签的键值编码。”
所以我尝试了其他方法,而不是将 File's Owner 设置为我的自定义类,而是将 View 设置为我的自定义类,并且它起作用了。
我的问题是为什么它不适用于第一种方法?我应该使用 File's Owner 吗?如果没有 - 我应该如何使用它?
【问题讨论】:
-
尝试注册类 [myTableView registerClass:[UITableViewHeaderFooterView class] forHeaderFooterViewReuseIdentifier:@"CustomHeaderView"];
-
尝试为每个单元格使用单独的 xib
-
是的,这有点令人困惑。当您注册一个 NIB 以供重用时,系统使用 XIB 的/NIB 的 content - 而不是文件本身。因此,正如您所见,正确的做法是将 XIB 的根视图设置为您的自定义类。
-
@levinvarghese 我不确定它应该如何与 XIB 文件一起使用,插座应该如何连接?我已经尝试过了,但出现了一个错误,指出我的网点为零
-
@SPatel 我不确定您所说的“每个单元格单独的 xib”是什么意思
标签: ios swift uitableview interface-builder uitableviewsectionheader