我想使用IB
在单独的.xib中创建自定义标题剖面视图然而在IB中我找不到组件UITableViewHeaderFooterView(类似于UITableViewCell)并为其分配重用
那么如何在自定义标题部分创建?
我创建了一个继承自UITableViewHeaderFooterView的类MySection 创建.xib,MySection.xib 注册xib以进行单元重用
问题是,如何使用initWitReuseIdentifier ....
答案 0 :(得分:64)
这绝对是可能的,Apple提供了一个示例here。
下载示例代码并查看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;
}
答案 1 :(得分:13)
我写了guide(在iOS 9上测试过),包含4个步骤:
UITableViewHeaderFooterView
viewDidLoad
中,为表格视图调用registerNib:forHeaderFooterViewReuseIdentifier:
viewForHeaderInSection
并使用dequeueReusableHeaderFooterViewWithIdentifier
取回页眉/页脚答案 2 :(得分:2)
通过以下解决方法,我可以将IB项目拖动到代码作为变量。 UITableViewHeaderFooterView不允许开箱即用。
创建(新文件/ CocoaTouchClass) UITableViewHeaderFooterView .h.m.xib通常
暂时 将超类 从UITableViewHeaderFooterView重命名为UIView。拖动 - 根据需要将UI项目分配给代码,IB将分配键值 正确的,完成后还原为UITableViewHeaderFooterView。
答案 3 :(得分:1)
足以创建视图并在IB中分配其类(重用标识符不需要在接口构建器中设置(如通过自定义UITableViewCell))
答案 4 :(得分:0)
UITableViewHeaderFooterView文档包含registerNib:forHeaderFooterViewReuseIdentifier:
方法
但是目前(截至2013年9月4日)Interface Builder中的对象库没有包含UITableViewHeaderFooterView。 这使得registerNib:forHeaderFooterViewReuseIdentifier:无用,因为无法在nib中正确配置视图。 也许最好尝试重复使用细胞...
答案 5 :(得分:0)
在xib中创建新视图
从nib加载视图并设置为以footerview的形式查看到tableview
UIView * headerview = [[[NSBundle mainBundle] loadNibNamed:@“ReguistrationHeaderView”owner:self options:nil] firstObject]; [self.tableview setTableFooterView:headerview];
答案 6 :(得分:0)
我总是使用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 }
我从未遇到过这样的问题(或者至少我的客户总是付钱给我)。
答案 7 :(得分:0)
尽管所有这些答案都有效,但它们并未完全解决如何使用Interface Builder设置reuseIdentifier
的原始问题。实际上,借助“用户定义的运行时属性”是可能的。您可以使用属性直接在Interface Builder中设置reuseIdentifier
:
执行此操作将与reuseIdentifier
Interface Builder属性检查器中的本机UITableViewCell
字段完成完全相同的操作。
答案 8 :(得分:0)
从iOS 8开始,UITableHeaderFooterView的子视图应位于容器视图中,并且您不应在页眉/页脚视图中设置背景。对象库缺少UITableHeaderFooterView,因此我尝试了在xib中创建一个UIView并将另一个添加为Container View的方法。我担心的是,UITableHeaderFooterView上没有内容视图出口,而且我不确定我的内容视图实际上最终会成为内容视图。
这听起来像是黑客入侵或API滥用,但是这种方法对我没有任何警告或问题:
我想知道这种方法的任何(潜在)问题,请发表评论。