我正在使用 [[NSBundle mainBundle] loadNibNamed:...] 从 Nib 加载 UITableViewCell。现在我想在我的代码中使用 tableviewcell 之前以编程方式执行一些初始化后工作。我应该把这段代码放在哪里,因为我似乎无法在 initWithCoder 方法中执行此操作,因为类中的标签对象仍然为零(因此无法设置任何内容)。 tableviewcell 中的 UILabels 何时首先初始化(它们都定义为 IBOutlet)?
最佳答案
您应该子类化UITableViewCell
,并在其中放置一个awakeFromNib
方法,以在从 Nib 唤醒后执行初始化。
为了保持代码的灵 active ,请将此初始化代码放入名为 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];
的一个令人讨厌的类型转换)
关于iphone - 以编程方式修改从 Nib 初始化的 UITableViewCell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4559533/