我有一个UITableViewController子类,其原型单元格在故事板中被模拟。
cellForRowAtIndexPath
委托方法中有相当数量的代码来设置单元格。问题是如果单元格刚刚从重用池中出列,我不需要大部分,因为当单元格第一次出列时已经完成了。我无法在故事板中执行此操作,因为我只能以编程方式访问某些属性。
UITableViewController在从故事板中获取原型单元时,是否在我的UITableViewCell子类中调用初始化程序?我试过了(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
,但这似乎不是这个过程的一部分。
答案 0 :(得分:13)
当UITableView实例调用dequeueReusableTileWithIdentifier:
时,单元格不会重新初始化。相反,在该调用中,出列的UITableViewCell将调用-(void)prepareForReuse
。这是因为重新初始化单元是昂贵的,如果我们可以提供一种更简单的方法来准备它的重用(呃,呃,得到它?)它节省了大量的CPU工作。
如果您正在使用自定义单元格,请覆盖UITableViewCell prepareForReuse
。
答案 1 :(得分:10)
我可能没有正确地说出我的问题但我在这里寻找的确是(void)awakeFromNib
。
在单元格出列时调用一次,而不是在重用时调用。允许我以编程方式进行一些设置,在故事板中没有意义。
答案 2 :(得分:0)
因为您正在加载(反序列化)故事板(nib 文件)中的单元格,因此调用了 -[UITableViewCell initWithCoder:]
方法。