【问题标题】:UITableView Custom Section HeaderUITableView 自定义部分标题
【发布时间】: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


【解决方案1】:

这是一个很好的问题。当您在视图本身上设置类时它不起作用的原因是它没有一个子视图。每当您想让根视图成为子类时,都需要再添加一个容器视图,因为加载的 nib 需要父视图。

您需要做的就是将类设置为根视图,拖入一个容器视图并将其约束到超级视图的所有边缘,然后添加您的子视图,它就可以工作了。

【讨论】:

    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多