InterfaceBuilder中的UITableViewHeaderFooterView

Pet*_*isu 35 cocoa-touch uitableview

我想使用IB在单独的.xib中创建自定义标题部分视图

但是在IB中我找不到组件UITableViewHeaderFooterView(类似于UITableViewCell)并为其分配重用

那么如何在自定义标题部分创建?

我创建了一个继承自UITableViewHeaderFooterView的MySection类创建.xib,MySection.xib注册xib以便重用单元格

问题是,如何使用initWitReuseIdentifier ....

Mat*_*ker 64

这绝对是可能的,Apple 在这里提供了一个例子.

下载示例代码并查看SectionHeaderView.xib.

这样做的方法是创建一个带有单个UIView的xib.然后,将类类型设置为从UITableViewHeaderFooterView继承的类.

一旦你有一个继承自UITableViewHeaderFooterView的类的nib,请调用以下命令来注册该类以作为页眉或页脚重用:

static NSString * const SectionHeaderViewIdentifier = @"SectionHeaderViewIdentifier";

[self.tableView registerNib:[UINib nibWithNibName:@"SectionHeaderView" bundle:nil] forHeaderFooterViewReuseIdentifier:SectionHeaderViewIdentifier];
Run Code Online (Sandbox Code Playgroud)

要使用视图,请实现表委托方法tableView:viewForHeaderInSection:如下所示:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSinteger)section {

    SectionHeaderViewClass *sectionHeaderView = (SectionHeaderView *)[tableView dequeueReusableHeaderFooterViewWithIdentifier:SectionHeaderViewIdentifier];

    // Do stuff...

    return sectionHeaderView;
}
Run Code Online (Sandbox Code Playgroud)

  • 在iOS8上会出现如下警告:不推荐在UITableViewHeaderFooterView上设置背景颜色.请改用contentView.backgroundColor.要修复,在IB中,将UIView的背景颜色设置为"默认". (23认同)
  • 在iOS 8.3中,您还需要将UITableView的sectionHeaderHeight属性设置为某个值,否则默认为0并且不会调用您的委托方法.(是的,这是愚蠢的.) (3认同)
  • 问题在于,您的页眉/页脚视图的子视图将不会最终成为contentView的子视图,应该将它们放置在它们的位置,而是将它们直接添加到UITableViewHeaderFooterView本身。 (2认同)
  • @smileyborg是否可以通过Interface Builder将子视图添加到UITableViewHeaderFooterView的contentView中? (2认同)

sam*_*ize 15

我写了一个指南(在iOS 9上测试过),包括4个步骤:

  1. 子类 UITableViewHeaderFooterView
  2. 使用子类视图创建Nib,并添加1个容器视图,其中包含页眉/页脚中的所有其他视图
  3. viewDidLoad,调用registerNib:forHeaderFooterViewReuseIdentifier:表视图
  4. 实现viewForHeaderInSection并使用dequeueReusableHeaderFooterViewWithIdentifier以获取页眉/页脚


dba*_*art 5

虽然所有这些答案都有效,但它们并没有完全解决如何设置reuseIdentifierusing Interface Builder的原始问题。实际上,在“用户定义的运行时属性”的帮助下是可能的。您可以reuseIdentifier使用属性直接在 Interface Builder 中设置:

Interface Builder 用户定义的运行时属性

这样做将完成与Interface Builder 属性检查器中的本机reuseIdentifier字段完全相同的事情UITableViewCell