【问题标题】:Programmatically modify a UITableViewCell initialized from a nib?以编程方式修改从笔尖初始化的 UITableViewCell?
【发布时间】:2010-12-30 02:22:19
【问题描述】:
我正在使用 [[NSBundle mainBundle] loadNibNamed:...] 从 nib 加载 UITableViewCell。现在我想在我的代码中使用 tableviewcell 之前以编程方式做一些初始化后的工作。我应该把这段代码放在哪里,因为我似乎无法在 initWithCoder 方法中这样做,因为类中的标签对象仍然为零(所以不能设置任何东西)。 tableviewcell 中的 UILabel 是什么时候初始化的(它们都定义为 IBOutlets)?
【问题讨论】:
标签:
iphone
uitableview
initialization
nib
【解决方案1】:
您应该继承UITableViewCell,并在其中放入awakeFromNib 方法,以便在从笔尖唤醒后执行初始化。
为了让您的代码保持灵活,将此初始化代码放在名为myInit 的例程中,并从awakeFromNib 和其他应该调用它的地方调用它。
经过一番努力,我想出了一种稍微不同的方法来应对这种情况。我继承UITableViewCell 并有一个像这样的初始化例程:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
[[NSBundle mainBundle] loadNibNamed:@"MyUITableViewCell" owner:self options:nil];
[self addSubview:self.contentView];
}
return self;
}
其中contentView 是包含单元格内容的IBOutlet。这允许我的其余代码像任何其他单元格一样调用此单元格。 (除了(MyUITableViewCell*)[tv dequeueReusableCellWithIdentifier:CellIdentifier]; 的一个讨厌的演员表)