我遇到问题的表是从另一个表控制器推出的,这个表中只有一个部分,我正在使用自定义单元格。这是numberOfRowsInSection的代码:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSInteger numberOfRows;
if ([imagesArray count] == 0) {
numberOfRows = 0;
}
else {
if ([imagesArray count] % 4 == 0) {
numberOfRows = [imagesArray count] / 4;
}
else {
numberOfRows = ([imagesArray count] / 4) + 1;
}
}
NSLog(@"numberOfRowsInSection: %d", numberOfRows);
return numberOfRows;
}
此处的日志始终打印预期的行数。到现在为止还挺好。现在让我们来看看cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"cellForRowAtIndexPath: %@", [indexPath description]);
ImageTableCell *cell = (ImageTableCell *)[tableView dequeueReusableCellWithIdentifier:@"4ImagesCell"];
if (cell == nil) {
cell = [[[ImageTableCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"4ImagesCell"] autorelease];
}
return cell;
}
此处的控制台“始终”打印以下内容:
cellForRowAtIndexPath: <NSIndexPath 0x5a4f2c0> 2 indexes [0, 0]
cellForRowAtIndexPath: <NSIndexPath 0x5a4f2c0> 2 indexes [0, 1]
cellForRowAtIndexPath: <NSIndexPath 0x5a4f2c0> 2 indexes [0, 2]
cellForRowAtIndexPath: <NSIndexPath 0x5a4f2c0> 2 indexes [0, 3]
cellForRowAtIndexPath: <NSIndexPath 0x5a4f2c0> 2 indexes [0, 4]
无论numberOfRowsInSection返回的值是什么,无论是零还是100,表总是要求5行!我甚至尝试在numberOfRowsInSection中返回一个静态数字而不是当前条件,但它对实际的单元格数没有影响!
让我发疯的是,在转到cellForRowAtIndexPath之前,表确实达到了numberOfRowsInSection方法!
我能想到的唯一可能导致这种情况的是,这个表控制器是从另一个UITableViewController推送的,但是当我在这个表中时,我从未检查过前一个表的numberOfRowsInSection方法,我甚至试图修改它的数量父表中的行没有任何运气。
如果缺少任何信息,请告诉我。这个项目很复杂,我想不出这个问题的任何其他相关信息。
答案 0 :(得分:2)
那是因为tableview只加载可见单元格。你试过滚动你的tableview吗?我敢打赌,如果你这样做,你会看到更多的行被加载......
答案 1 :(得分:0)
您可以尝试将其记录下来吗?
NSLog(@"cellForRowAtIndexPath: (section:%@, row:%@)", [indexPath section], [indexPath row]);
我认为我们所看到的描述方法的输出可能不是您认为的意思。