我想使用 IB 在单独的 .xib 中创建自定义标题部分视图
但是在 IB 中我找不到组件 UITableViewHeaderFooterView(类似于 UITableViewCell)并为其分配重用
那么如何在自定义标题部分中创建?
我创建了一个继承自 UITableViewHeaderFooterView 的类 MySection 创建一个 .xib,MySection.xib 注册 xib 用于单元格重用
问题是,如何使用 initWitReuseIdentifier....
我想使用 IB 在单独的 .xib 中创建自定义标题部分视图
但是在 IB 中我找不到组件 UITableViewHeaderFooterView(类似于 UITableViewCell)并为其分配重用
那么如何在自定义标题部分中创建?
我创建了一个继承自 UITableViewHeaderFooterView 的类 MySection 创建一个 .xib,MySection.xib 注册 xib 用于单元格重用
问题是,如何使用 initWitReuseIdentifier....
这是绝对可能的,Apple在这里提供了一个例子。
下载示例代码并查看 SectionHeaderView.xib。
这样做的方法是创建一个带有单个 UIView 的 xib。然后,将类类型设置为继承自 UITableViewHeaderFooterView 的类。
一旦你有一个从 UITableViewHeaderFooterView 继承的类的 nib,调用以下代码来注册该类以作为页眉或页脚重用:
static NSString * const SectionHeaderViewIdentifier = @"SectionHeaderViewIdentifier";
[self.tableView registerNib:[UINib nibWithNibName:@"SectionHeaderView" bundle:nil] forHeaderFooterViewReuseIdentifier:SectionHeaderViewIdentifier];
要使用视图,请实现表委托方法 tableView:viewForHeaderInSection: 如下所示:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSinteger)section {
SectionHeaderViewClass *sectionHeaderView = (SectionHeaderView *)[tableView dequeueReusableHeaderFooterViewWithIdentifier:SectionHeaderViewIdentifier];
// Do stuff...
return sectionHeaderView;
}
我写了一个指南(在 iOS 9 上测试),包括 4 个步骤:
UITableViewHeaderFooterView
viewDidLoad
,调用registerNib:forHeaderFooterViewReuseIdentifier:
表格视图viewForHeaderInSection
并用于dequeueReusableHeaderFooterViewWithIdentifier
取回页眉/页脚以下变通方法使我能够将 IB 项目作为变量拖放到代码中。UITableViewHeaderFooterView 不允许开箱即用。
正常创建(New File/CocoaTouchClass) UITableViewHeaderFooterView .hmxib
暂时将超类从 UITableViewHeaderFooterView重命名为 UIView。根据需要将您的 UI 项目拖放到代码中,IB 将正确分配键值,完成后恢复为 UITableViewHeaderFooterView。
足以在 IB 中创建视图并分配其类(无需在界面构建器中设置重用标识符(如通过自定义 UITableViewCell))
从 iOS 8 开始, UITableHeaderFooterView 的子视图应该在容器视图中,并且您不应该在页眉/页脚视图上设置背景。对象库缺少 UITableHeaderFooterView,所以我尝试了在 xib 中创建一个 UIView 并将另一个作为容器视图添加到其中的方法。我担心的是 UITableHeaderFooterView 上没有内容视图出口,我不能确定我的内容视图实际上最终是内容视图。
这听起来像是 hack 或 API 误用,但是我没有遇到这种方法的警告或问题:
我想知道这种方法的任何(潜在)问题,请发表评论。
UITableViewHeaderFooterView 文档包含registerNib:forHeaderFooterViewReuseIdentifier:
方法
但目前(截至 2013 年 9 月 4 日)Interface Builder 中的对象库不包含 UITableViewHeaderFooterView。这使得 registerNib:forHeaderFooterViewReuseIdentifier: 无用,因为无法在 nib 中正确配置视图。也许最好尝试重用细胞......
在 xib 中创建新视图
从笔尖加载视图并设置为作为页脚视图查看到表格视图
UIView *headerview = [[[NSBundle mainBundle] loadNibNamed:@"ReguistrationHeaderView" owner:self options:nil] firstObject]; [self.tableview setTableFooterView:headerview];
我总是使用 UITableViewCell 作为我的表的页眉(或页脚),以便能够直接在情节提要中编辑它们。
我的工作流程:
关键部分是返回 headerCell 的 contentView (而不是 headerCell 本身),否则在使用 reloadRowsAt 或类似函数(最多消失标题)时你会遇到奇怪的行为。
这是我的代码:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell") as! MyHeaderTableViewCell
headerCell.lblTitle.text = "My Title"
return headerCell.contentView }
我这样做从来没有遇到过问题(或者至少我的客户总是付钱给我)。