我在ViewController中创建了一个UITableView
。
当viewdidload
时,我通过
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"tableViewCell"];
以下是UITableview
委托和数据源
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 25;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 100;
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"visible cell: %d",[[self.tableView visibleCells] count]);
static NSString* CellIdentifier = @"tableViewCell";
UITableViewCell* cell = cell;
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil){
NSLog(@"nil -> create new");
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
else{
NSLog(@"not nil reuse cell success");
}
[cell.textLabel setText:[NSString stringWithFormat:@"%d",indexPath.row]];
return cell;
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"will display: %d",indexPath.row);
}
结果是,当我向下滚动tableview时,会显示这些单元格的日志显示单元格。但是当我滚动到底部并滚动到顶部。登录willDisplayCell未显示。 并且可见细胞的数量保持增长到25.因此,tableview似乎认为所有25个细胞仍然可见。但是在屏幕上一次只能显示5-6个单元格。
我想这可能是关于静态细胞和动态细胞的问题?我想我正在使用动态的。导致从dequeueReusableCellWithIdentifier获取的单元格始终不是nil。
这是输出
2014-04-18 10:51:22.101 [5834:60b] visible cell: 6
2014-04-18 10:51:22.103 [5834:60b] not nil reuse cell success
2014-04-18 10:51:22.104 [5834:60b] will display: 6
2014-04-18 10:51:22.401 [5834:60b] visible cell: 7
2014-04-18 10:51:22.403 [5834:60b] not nil reuse cell success
2014-04-18 10:51:22.405 [5834:60b] will display: 7
2014-04-18 10:51:22.767 [5834:60b] visible cell: 8
2014-04-18 10:51:22.769 [5834:60b] not nil reuse cell success
2014-04-18 10:51:22.771 [5834:60b] will display: 8
2014-04-18 10:51:23.451 [5834:60b] visible cell: 9
2014-04-18 10:51:23.453 [5834:60b] not nil reuse cell success
2014-04-18 10:51:23.455 [5834:60b] will display: 9
2014-04-18 10:51:23.551 [5834:60b] visible cell: 10
2014-04-18 10:51:23.552 [5834:60b] not nil reuse cell success
2014-04-18 10:51:23.554 [5834:60b] will display: 10
2014-04-18 10:51:23.768 [5834:60b] visible cell: 11
2014-04-18 10:51:23.769 [5834:60b] not nil reuse cell success
2014-04-18 10:51:23.772 [5834:60b] will display: 11
2014-04-18 10:51:24.067 [5834:60b] visible cell: 12
2014-04-18 10:51:24.069 [5834:60b] not nil reuse cell success
答案 0 :(得分:1)
- (NSArray *)indexPathsForVisibleRows
例如:
NSArray indexArray = [self.tableView indexPathsForVisibleRows];
答案 1 :(得分:0)
最后我弄清楚了。这很糟糕。我的项目结构如下。 我在storyboard的FirstViewController中有一个UITableView 对于FirstViewController。单击一个单元格时。它也会推送到包含uitableview的SecondViewController。 这个uitableview是我上面提到的tableview。 最后,我通过删除故事板并创建FirstViewController来修复它。然后一切都很顺利。
谢谢大家。