3

我正在尝试将 UITableView 与 .xib 文件一起使用。我过去用故事板做过,你在动态原型中声明一个重用 id。我在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath应该工作的函数中有这段代码:

NSString *ReuseId = @"DefaultCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ReuseId];

if (cell == nil) {
    NSLog(@"cell == nil");
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ReuseId];
}

但是,当我运行它时,cell == nil它不是打印一次,而是为每一行打印一次。

为什么??

谢谢。

4

2 回答 2

4

你有多少行?它应该首先在 iPhone 上创建多达 11 或 12 个。取决于表格视图的高度和单元格的高度。

因此,如果您的行数少于视图中适合的单元格,则单元格重用将永远不会发生并且不需要。

if (cell == nil) {
    NSLog(@"cell == nil");
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ReuseId];
} else {
    NSLog(@"We have a reused cell!");
}

尝试多次重复您的行并慢慢滚动。现在每次你要在视图上滚动一个新单元格的第一个像素时,它应该打印“我们有一个重用的单元格!”。

于 2013-07-10T15:12:41.877 回答
2

当您第一次打开表格视图时,将没有单元格可重用,因为所有单元格都将实际使用。当您开始滚动表格时,单元格开始被重复使用,并且一些单元格开始从顶部消失。

更新

假设您有一个可以部分显示 6 行(高度为 5.5)的表格视图。当 UITableViewController 加载带有单元格的表格时,它会创建 6 个单元格实例,因为它们必须同时显示。

当您开始滚动并且第一个单元格被隐藏时,它会被添加到可重复使用的单元格集中。那是在创建第 8 个单元格时(因为第 7 个单元格将被新创建,因为第一个单元格仍然可以看到一半高度)第一个单元格将被重用。

于 2013-07-10T15:11:22.800 回答