我正在尝试使用带有.xib文件的UITableView。我以前用故事板完成了它,你在动态原型中声明了一个重用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
一旦它为每一行打印它。
为什么?
感谢。
答案 0 :(得分:4)
你有几行?它应该首先在iPhone上创建最多11或12。取决于桌面视图的高度和细胞的高度。
因此,如果您的行数少于视图中适合的单元格,则不会发生单元格重用,也不需要。
if (cell == nil) {
NSLog(@"cell == nil");
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ReuseId];
} else {
NSLog(@"We have a reused cell!");
}
尝试多次重复行并慢慢滚动。现在,每当您要在视图上滚动新单元格的第一个像素时,它应该打印“我们有一个重用的单元格!”。
答案 1 :(得分:2)
第一次打开表格视图时,将无法重复使用单元格,因为所有单元格都将在实际使用中。当您开始滚动表格时,单元格开始被重用,并且一些单元格开始从顶部消失。
<强>更新强>
假设您有一个可以部分显示6行(5.5高)的表格视图。当UITableViewController加载带有单元格的表时,它会创建6个单元格实例,因为它们必须同时显示。
当您开始滚动并隐藏第一个单元格时,它会被添加到可重复使用的单元格集中。那是在创建第8个单元格时(因为第7个单元格将被创建,因为第1个单元格仍将以半高可见),第一个单元格将被重复使用。