【发布时间】:2014-02-13 19:52:15
【问题描述】:
我创建了自己的CustomTableView 和CustomCell。单元格在xib 中,我在初始化tableView 时正在注册它,如下所示:
[self registerNib:[UINib nibWithNibName:@"CustomCell" bundle:nil]
forCellReuseIdentifier:kCustomCellIdentifier];
如果我不这样做,我将无法定义 ReuseIdentifier 应该“指向”这个类的内容。这是我的cellForRow:
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell = [self dequeueReusableCellWithIdentifier:
kCustomCellIdentifier forIndexPath:indexPath];
if(!cell)
{
cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomCell"
owner:self options:nil] objectAtIndex:0];
cell.delegate = self;
[cell initialSetup]; //Other stuff
}
else
[cell resetCell];
//And other awesome stuff
return cell;
}
这“有效”。当我启动我的应用程序时,我自己的自定义单元格正在显示。
然而,事实证明该单元格从未从[self dequeue.. 返回为nil。因此,if 语句if(!cell) 永远不会为真。我在这个语句中有额外的设置,我想执行,但我不知道现在第一次初始化单元格的位置。如果我删除registerNib,那么这个陈述是正确的,但是对于所有单元格都是正确的,并且不会被出列。
我可能可以解决这个问题,并将我的initialSetup(和其他东西)放在 CustomCell 类的-(id)initWithCoder..-方法中,但我想知道我的单元格现在在哪里被初始化。为什么我的单元格在cellForRowAtIndexPath 之前存在?
【问题讨论】:
-
你在使用
storyboard吗? -
那么
if(!cell)将不成立,因为dequeueReusableCellWithIdentifier返回一个单元格。在CustomCell中使用awakeFromNib方法 -
@Akhilrajtr 但
dequeue..的意义不在于我在重复使用自己的细胞吗?我想象的方式是,在发布时 - 没有单元格已排队。我从来没有做过,所以他们怎么会排队,对吧?然后,当我向下滚动 10 行时,我创建的第一个单元格将被排队而不是被释放,以便我以后可以使用它。当我需要第 11 个单元格时,它首先通过调用dequeueReusable..来检查这个队列。由于我的第一个单元格已排队,因此将在此处返回。这对我来说很有意义。如果你们说dequeue总是返回一个单元格,那我什么都不懂。 -
我看到的所有例子都把
if(!cell)放在dequeueReusableCell..之后。另外,使用awakeFromNib而不是-initWithCoder对我来说有什么区别? -
覆盖
prepareForReuse的UITableViewCell方法
标签: ios objective-c uitableview xib