通过 Storyboard 和新 Xib 实现自定义表格部分标题
Posted
技术标签:
【中文标题】通过 Storyboard 和新 Xib 实现自定义表格部分标题【英文标题】:Implementing a custom table section header via Storyboard and new Xib 【发布时间】:2013-01-28 20:59:00 【问题描述】:这是我所做的:
我创建了一个自定义的xib
文件,其中有一个小的 UIView 用于自定义表节标题。
我对自定义的xib
文件进行了分类。
我想将它作为标题添加到 tableView 中。我查看了一些资源,但它们似乎已经过时或缺少信息。
查看文档,我看到了添加自定义标头的参考,其中包含以下说明:
要让表格视图知道您的页眉或页脚视图,您需要注册它。您可以使用 UITableView 的 registerNib:forCellReuseIdentifier: 或 registerClass:forCellReuseIdentifier: 方法。
当我将 tableView 添加到我的故事板视图时,很容易在 XCode 中为其分配一个重用标识符。我什至能够创建一个自定义单元格xib
文件,并且它还在 XCode 中有一个重用标识符的位置。
当我为节标题创建自定义 UIView 时,它没有用于重用标识符的条目。没有这个,我不知道如何使用registerNib:forCellReuseIdentifier
。
更多信息:
我有一个故事板场景,里面有一个tableView
。 tableView
是一个被链接的自定义类,tableView
对象在父视图的ViewController
文件中有一个出口。
父ViewController
既是UITableViewDataSourceDelegate
又是UITableViewDelegate
。同样,我能够毫无问题地实现自定义单元格。除了标题之外,我什至无法以任何方式修改标题。
我尝试从自定义 tableView
类中调用方法 [[self tableHeaderView] setBackgroundColor:[UIColor clearColor]];
,但没有任何反应。我尝试在父 ViewController
类中使用此方法,方法是使用如下插座名称:
[[self.tableOutlet tableHeaderView] setBackgroundColor:[UIColor clearColor]];
任何帮助将不胜感激。
编辑:(无法将背景更改为透明)
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
HeaderView *headerView = [self.TableView dequeueReusableHeaderFooterViewWithIdentifier:@"tableHeader"];
// Set Background color
[[headerView contentView] setBackgroundColor:[UIColor clearColor]];
// Set Text
headerView.headerLabel.text = [self.sectionArray objectAtIndex:section];
return headerView;
【问题讨论】:
【参考方案1】:您不需要在 xib 中设置标识符——您只需要在注册时使用相同的标识符,并在将标题视图出列时使用。在 viewDidLoad 方法中,我注册了这样的视图:
[self.tableView registerNib:[UINib nibWithNibName:@"Header1" bundle:nil] forHeaderFooterViewReuseIdentifier:@"header1"];
然后,在委托方法中:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UIView *headerView = [self.tableView dequeueReusableHeaderFooterViewWithIdentifier:@"header1"];
return headerView;
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
return 100;
【讨论】:
我实现了这个,它似乎工作,但标题的背景仍然是默认样式。我可以使用放置在自定义xib
文件中的标签来更改标题的文本。我在标头的类文件(CustomHeader.h、CustomHeader.m)中将标签作为出口。
@orbv,你必须使用 headerView.contentView.backgroundColor = ... 来改变背景颜色。
我尝试插入它,它仍然保持不变。同样,设置自定义标签文本效果很好。我在编辑中发布了代码 sn-p。
@orbv,这是因为默认的标题视图也有一个具有该外观的 backgroundView 属性,因此如果您的颜色清晰,您可以看到它。如果添加,headerView.backgroundView = [[UIView alloc]initWithFrame:headerView.frame];您将看到一个新的清晰视图。
@orbv,是的,有一个单独的表格标题可以随着表格视图向上滚动。它不像部分标题那样粘在顶部。【参考方案2】:
关于背景颜色的问题(除非你想要透明):
您可以创建一个占据整个视图的UIView
,然后更改其背景颜色。
如果你不想让别人知道发生了什么,你可以覆盖 backgroundColor 属性:
//interface
@property (copy, nonatomic) UIColor *backgroundColor;
//implementation
@dynamic backgroundColor;
- (void)setBackgroundColor:(UIColor *)backgroundColor
//self.viewBackground is the created view
[self.viewBackground setBackgroundColor:backgroundColor];
- (UIColor *)backgroundColor
return self.viewBackground.backgroundColor;
【讨论】:
以上是关于通过 Storyboard 和新 Xib 实现自定义表格部分标题的主要内容,如果未能解决你的问题,请参考以下文章
如何通过编码管理 .storyboard 或 .xib 文件中的多个视图。?
MacOS-MacAPP通过纯代码不依赖storyboard/xib加载UI主界面
iOS-设置Main Interface通过storyboard或者xib加载主界面
通过 xib 或 storyboard 将子视图添加到 UICollectionViewCell 的 contentView