我在哪里可以声明自定义表格单元格的自定义初始化?

时间:2014-09-17 14:29:19

标签: objective-c

如果我有一个使用的自定义表格单元格:

tableView dequeueReusableCellWithIdentifier

在自定义单元格内部可以设置自定义初始化参数吗?我的自定义表格单元格的自动生成的.m文件包括:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    NSLog(@"INITWITHSTYLE!");
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

我添加了NSLog调用以查看是否曾调用过initWithStyle,但是从未到达过NSLog,这意味着也永远不会调用initWithStyle 。因此,当使用dequeueReusableCellWithIdentifier初始化自定义表格单元格时,实际使用了该自定义单元格的init方法?

2 个答案:

答案 0 :(得分:1)

您的单元格将在-(void)awakeFromNib中初始化一次(即使它来自故事板)。

然后,无法知道它将在何处出列,但是当它从屏幕上移除并排入可重用的单元池时它会收到一条消息:此时调用- (void)prepareForReuse

答案 1 :(得分:0)

如果您使用故事板,则可以使用awakeFromNib,否则应调用initWithStyle:reuseIdentifier:

- (void)awakeFromNib {
}

但是你应该记住,这个单元格会被重用,所以如果你的单元格第一次被调用awakeFromNib,可以重新使用,但稍后可以重复使用单元格,这种方法不会被重复使用再次调用,在这种情况下,如果它不适合你,你可以在传递数据时使用自定义setter

//扩展

在评论中,您询问了重复使用单元格时调用的方法。 您可以使用prepareForReuse,请阅读讨论(摘自Apple)

- (void)prepareForReuse
  

讨论如果UITableViewCell对象是可重用的 - 也就是说,它有一个   重用标识符 - 在对象之前调用此方法   从UITableView方法返回   dequeueReusableCellWithIdentifier :.出于性能原因,你   应该只重置与之无关的单元格的属性   内容,例如,alpha,编辑和选择状态。桌子   tableView中的view委托:cellForRowAtIndexPath:应该总是如此   重新使用单元格时重置所有内容。如果单元格对象没有   具有关联的重用标识符,不调用此方法。如果你   重写此方法,您必须确保调用超类   实施