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

时间:2010-12-30 02:22:19

标签: iphone uitableview initialization nib

我使用[[NSBundle mainBundle] loadNibNamed:...]从nib加载UITableViewCell。现在我想在我的代码中使用tableviewcell之前以编程方式进行一些后初始化工作。我应该把这段代码放在哪里,因为我似乎无法在initWithCoder方法中执行此操作,因为类中的标签对象仍然是nil(因此无法设置任何内容)。 tableviewcell中的UILabel何时初始化(它们都被定义为IBOutlets)?

1 个答案:

答案 0 :(得分:5)

你应该继承UITableViewCell,并在其中放置awakeFromNib方法,以便在从笔尖中唤醒后执行初始化。

为了保持代码的灵活性,请将此初始化代码放在一个名为myInit的例程中,并从awakeFromNib和其他应调用它的地方调用它。

经过一番挣扎之后,我对这种情况采取了略微不同的方法。我是UITableViewCell的子类,并有一个这样的init例程:

- (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];