的UITableViewDelegate方法
这里是一个Xcode项目,我只是做了问这个问题:的UITableViewDelegate方法
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加载后(以及在每个单元格出现之前)调用上述meothds?当然,他们应该在每个细胞出现之前才被调用?
如果您的表视图在实际完全显示之前重新加载,那可能会导致您看到的行为。然后单元格会被初始化,准备显示,但随着表格重新加载,所有这些都会丢失(甚至在屏幕上显示之前)。
为什么它会在完全显示之前重新加载? – 2010-12-13 18:12:55
如果您在任何地方调用'reloadData',或者更改数据源或更改框架,或者在已经准备好要显示的单元格之后对表格视图执行任何操作。底线是你不能真正期待它*不*重新加载它的数据,因此你的代码在这种情况下应该总是正确行事。 – 2010-12-13 18:32:06
这些是默认的委托方法..每次都会为每个单元格调用这个方法。
您可以使用willDisplayCell:forRowAtIndexPath:
来配置字体和文本颜色。在较新版本的iPhone中,对于某些表格配置,如果在tableView:cellForRowAtIndexPath:
方法中配置标签文本颜色等内容,则在实际显示单元格之前的某个时间点,您的更改将会丢失。在这里,您可以执行诸如更改标签颜色,调整背景突出显示等事情。
不,我知道他们是什么,做什么以及何时使用它们。然而,我不知道为什么他们被称为一个单元格时,单元格不显示 – 2010-12-13 17:47:53
这不回答这个问题,为什么upvotes? – 2010-12-13 17:54:49
对我而言,它只能显示0到22 – KingofBliss 2010-12-13 17:55:01
当我运行它而没有触及任何东西时,只显示前23行(从0到22),日志确认只有23个单元格被创建并显示。这是模拟器,4.2,最新的SDK。 – Costique 2010-12-13 17:34:05
由于某些原因,只有当模拟器是活动窗口时才会启动。 – 2010-12-13 17:52:16
我从你的代码中添加了上述方法。 – vikingosegundo 2010-12-14 01:08:30