这是一个xcode项目,我刚才提出这个问题:
http://www.mediafire.com/?z26ufsfhby62br9
打开日志并运行它。您会发现它输出display: x
和create: x
,其中x是0到49的数字,并且对应于相同数字的单元格。它应该只在执行任何滚动之前输出到22,因为Apple总是吹嘘他们的tableview是根据需要加载的。
它基本上表明,只要表格视图出现就会为每个单元格触发tableView:willDisplayCell:forRowAtIndexPath:
和tableView:cellForRowAtIndexPath:
,为什么会这样?
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"create: %i", indexPath.row);
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
cell.textLabel.text = [NSString stringWithFormat:@"%i", indexPath.row];
return cell;
}
- (void) tableView:(UITableView *)tableView
willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"display: %i", indexPath.row);
}
为什么在tableView加载之后(在每个单元格出现之前)调用上面的meothd?当然应该在每个单元格出现之前调用它们吗?
答案 0 :(得分:1)
这些是默认的委托方法..每次都会为每个单元调用。
使用willDisplayCell:forRowAtIndexPath:
配置字体和文本颜色等内容。在较新版本的iPhone中,对于某些表格配置,如果在tableView:cellForRowAtIndexPath:
方法中配置标签文本颜色等内容,则在实际显示单元格之前的某个时刻,您的更改将会丢失。在这里,您可以执行更改标签颜色,调整背景突出显示等内容。
答案 1 :(得分:0)
如果您的表视图在实际完全显示之前正在重新加载,则可能会导致您看到的行为。然后,单元格将被初始化,准备显示,但随后重新加载表格,所有这些都将丢失(甚至在屏幕上显示之前)。