我想在我的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的Owner设置为我的自定义类,而是将View设置为我的自定义类,并且它起作用了。
答案 0 :(得分:0)
这是一个很好的问题。当您在视图本身上设置类时,它不起作用的原因是它没有完全一个子视图。每当您要将根视图设为子类时,都需要再添加一个容器视图,因为已加载的笔尖需要一个父视图。
您需要做的就是将类设置为根视图,将其拖动到容器视图中并将其约束到超级视图的所有边缘,然后添加子视图,这样便可以使用。