的UITableViewDelegate方法

问题描述:

这里是一个Xcode项目,我只是做了问这个问题:的UITableViewDelegate方法

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加载后(以及在每个单元格出现之前)调用上述meothds?当然,他们应该在每个细胞出现之前才被调用?

+0

当我运行它而没有触及任何东西时,只显示前23行(从0到22),日志确认只有23个单元格被创建并显示。这是模拟器,4.2,最新的SDK。 – Costique 2010-12-13 17:34:05

+0

由于某些原因,只有当模拟器是活动窗口时才会启动。 – 2010-12-13 17:52:16

+0

我从你的代码中添加了上述方法。 – vikingosegundo 2010-12-14 01:08:30

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

+0

为什么它会在完全显示之前重新加载? – 2010-12-13 18:12:55

+0

如果您在任何地方调用'reloadData',或者更改数据源或更改框架,或者在已经准备好要显示的单元格之后对表格视图执行任何操作。底线是你不能真正期待它*不*重新加载它的数据,因此你的代码在这种情况下应该总是正确行事。 – 2010-12-13 18:32:06

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

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

+0

不,我知道他们是什么,做什么以及何时使用它们。然而,我不知道为什么他们被称为一个单元格时,单元格不显示 – 2010-12-13 17:47:53

+2

这不回答这个问题,为什么upvotes? – 2010-12-13 17:54:49

+0

对我而言,它只能显示0到22 – KingofBliss 2010-12-13 17:55:01