带IB的UITableViewHeaderFooterView [英] UITableViewHeaderFooterView with IB
问题描述
经过多年避免瘟疫之类的Interface Builder,我决定给它一个机会。这并不容易。
After many years of avoiding Interface Builder like the plague I decided to give it a chance. It's not easy.
以 UITableViewHeaderFooterView
为例。与 UITableViewCell
一样,它有一个 contentView
属性。与 UITableViewCell
不同,它在Interface Builder对象库中没有模板。
Take UITableViewHeaderFooterView
for example. Like UITableViewCell
, it has a contentView
property. Unlike UITableViewCell
, it doesn't have a template in the Interface Builder object library.
我们应该如何使用Interface Builder创建 UITableViewHeaderFooterView
,内容 contentView
? registerNib:forHeaderFooterViewReuseIdentifier:
存在的事实让我觉得这应该是可能的。
How are we supposed to use Interface Builder to create a UITableViewHeaderFooterView
with the content inside contentView
? The fact that registerNib:forHeaderFooterViewReuseIdentifier:
exists makes me think this should be possible somehow.
推荐答案
这是我用IB定义 UITableViewHeaderFooterView
的最接近的地方:
This is the closest I got to define a UITableViewHeaderFooterView
with IB:
a。创建 UITableViewHeaderFooterView
子类( MYTableViewHeaderFooterView
)。
b 。仅为 contentView
创建一个nib文件( MYTableViewHeaderFooterContentView
)。
b. Create a nib file for the contentView
only (MYTableViewHeaderFooterContentView
).
℃。在 MYTableViewHeaderFooterView
中覆盖 initWithReuseIdentifier:
以加载nib文件中定义的视图。
c. Override initWithReuseIdentifier:
in MYTableViewHeaderFooterView
to load the view defined in the nib file.
- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithReuseIdentifier:reuseIdentifier];
if (self)
{
NSArray* objects = [[NSBundle mainBundle] loadNibNamed:@"MYTableViewHeaderFooterView"
owner:self
options:nil];
UIView *nibView = [objects firstObject];
UIView *contentView = self.contentView;
CGSize contentViewSize = contentView.frame.size;
nibView.frame = CGRectMake(0, 0, contentViewSize.width, contentViewSize.height);
[contentView addSubview:nibView];
}
return self;
}
d。注册 MYTableViewHeaderFooterView
类而不是nib文件:
d. Register the MYTableViewHeaderFooterView
class instead of the nib file:
[self.tableView registerClass:[MYTableViewHeaderFooterView class] forHeaderFooterViewReuseIdentifier:@"cell"];
这篇关于带IB的UITableViewHeaderFooterView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!