如果我有一个使用的自定义表格单元格:
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
方法?
答案 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:应该总是如此 重新使用单元格时重置所有内容。如果单元格对象没有 具有关联的重用标识符,不调用此方法。如果你 重写此方法,您必须确保调用超类 实施