以编程方式修改从nib初始化的UITableViewCell?

3
我正在使用[[NSBundle mainBundle] loadNibNamed:...]从nib文件中加载UITableViewCell。现在,我想在表格视图单元格在我的代码中使用之前以编程方式进行一些后初始化工作。我应该把这段代码放在哪里呢?似乎我不能在initWithCoder方法中执行此操作,因为类中的标签对象仍然为空(所以无法设置任何内容)。UILabels在第一次初始化时是在什么时候进行的(它们都被定义为IBOutlets)?
1个回答

5
你应该创建一个UITableViewCell的子类,并在其中添加一个awakeFromNib方法,以便在从nib唤醒后执行初始化操作。
为了使你的代码更加灵活,将这个初始化代码放在名为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];


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接