我在UITableViewCell中以编程方式创建了几个UIButtons,并在layoutSubviews
中设置了它的框架。我也在这里设置选定状态。
然而,似乎这不是创建或初始化按钮状态的最佳位置,因为多次调用layoutSubviews
。我在哪里可以放下以下代码,使得框架正确,但只会初始化一次?
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width / 2.0, self.frame.size.height)];
button.selected = YES
我的一个想法是初始化awakeFromNib
中的所有一次性设置,然后在layoutSubviews
中进行实际的帧设置。这是一个好方法吗?
答案 0 :(得分:1)
我建议将其放在
中- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
并使用Autolayout进行按钮放置。我将向您展示如何使用Masonry for Autolayout来保存线路。
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
UIButton *button = [UIButton new];
button.selected = YES;
// Add button to self
[self addSubview:button];
[button mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.mas_top);
make.left.equalTo(self.mas_left);
make.width.mas_equalTo(self.view.frame.size.width/2);
make.height.equalTo(self.mas_height);
}
}
return self;
}
答案 1 :(得分:1)
如果您正在为自定义UITableViewCell
类使用NIB文件,那么awakeFromNib
是您应该初始化UITableViewCell
类的UIElements,类属性和其他实例变量的方法。< / p>
否则,如果您使用的是自定义UITableViewCell
课程而没有 NIB,那么您应该初始化
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialize your frames here
}
return self;
}
现在,如果您想使用不同的按钮状态或数据更新您的单元格,那么您只需从
中调用单元格中的方法- tableView:cellForRowAtIndexPath:
并为该特定单元格更改您想要的任何内容。
例如:
- tableView:(UITableView *)tableView cellForRowAtIndecPath:(NSIndexPath *)indexPath {
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];
[cell someMethod];
return cell;
}