UITableViewDelegate方法

时间:2010-12-13 17:27:01

标签: iphone objective-c cocoa-touch ipad uitableview

这是一个xcode项目,我刚才提出这个问题:

http://www.mediafire.com/?z26ufsfhby62br9

打开日志并运行它。您会发现它输出display: xcreate: 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?当然应该在每个单元格出现之前调用它们吗?

2 个答案:

答案 0 :(得分:1)

这些是默认的委托方法..每次都会为每个单元调用。

使用willDisplayCell:forRowAtIndexPath:配置字体和文本颜色等内容。在较新版本的iPhone中,对于某些表格配置,如果在tableView:cellForRowAtIndexPath:方法中配置标签文本颜色等内容,则在实际显示单元格之前的某个时刻,您的更改将会丢失。在这里,您可以执行更改标签颜色,调整背景突出显示等内容。

答案 1 :(得分:0)

如果您的表视图在实际完全显示之前正在重新加载,则可能会导致您看到的行为。然后,单元格将被初始化,准备显示,但随后重新加载表格,所有这些都将丢失(甚至在屏幕上显示之前)。