UITableViewController numberOfRowsInSection不会影响实际的行数

时间:2010-08-07 00:29:31

标签: iphone objective-c uitableview uitabbarcontroller

我遇到问题的表是从另一个表控制器推出的,这个表中只有一个部分,我正在使用自定义单元格。这是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方法,我甚至试图修改它的数量父表中的行没有任何运气。

如果缺少任何信息,请告诉我。这个项目很复杂,我想不出这个问题的任何其他相关信息。

2 个答案:

答案 0 :(得分:2)

那是因为tableview只加载可见单元格。你试过滚动你的tableview吗?我敢打赌,如果你这样做,你会看到更多的行被加载......

答案 1 :(得分:0)

您可以尝试将其记录下来吗?

NSLog(@"cellForRowAtIndexPath: (section:%@, row:%@)", [indexPath section], [indexPath row]);

我认为我们所看到的描述方法的输出可能不是您认为的意思。