我有一个自定义的UITableViewHeaderFooterView类和一个xib。此xib中有一个标签,它使用插座连接到自定义类。此自定义类用作视图控制器中表视图的tableHeaderView。
我能够显示带有所需尺寸的标题视图,但标题中的标签未显示任何值。
在视图控制器的viewDidLoad。
中Meteor.publish('all_users', function () {
return Meteor.users.find({
_id: { $ne: this.userId }
});
});
在DashboardHeaderView中,它是UITableViewHeaderFooterView的子类。
- (void)viewDidLoad {
..
DashboardHeaderView* headerView = [[DashboardHeaderView alloc] initWithFrame:CGRectMake(0, 0, 320, 180) headerText:@"XYX"];
self.alertsTableView.tableHeaderView = headerView;
}
如果我在initWithFrame中添加一些日志消息:headerText:和layoutSubviews,我可以看到两者的self指向不同的地址,因此在layoutSubviews中,self.headerText总是为零。
- (id)initWithFrame:(CGRect)frame headerText:(NSString *)headerText {
if (self = [super initWithFrame:frame]) {
self.headerText = headerText;
NSArray* objects = [[NSBundle mainBundle] loadNibNamed:@"DashboardHeaderView"
owner:self
options:nil];
UIView *nibView = [objects firstObject];
UIView *contentView = self.contentView;
contentView.backgroundColor = [UIColor clearColor];
CGSize contentViewSize = contentView.frame.size;
nibView.frame = CGRectMake(0, 0, contentViewSize.width, contentViewSize.height);
[contentView addSubview:nibView];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
self.headerLabel.text = self.headerText;
}
如果查看上面的日志,为什么我们有两个不同的地址 - 0x7ff862cf1a90和0x7ff862cf05e0。
答案 0 :(得分:0)
layoutSubviews - 如果您需要更精确,请实施此方法 控制子视图的布局比约束或 自动化行为提供。
您正在layoutSubviews
方法中设置UILabel的值,该值仅用于调整操作大小。
我建议您将self.headerLabel.text = self.headerText
指令移到initWithFrame:headerText:
方法中,然后执行其他操作,例如将约束调整大小或更改为layoutSubviews
方法。