UITableview 删除可见区域中的单元格

Posted

技术标签:

【中文标题】UITableview 删除可见区域中的单元格【英文标题】:UITableview remove the cell in visible regision 【发布时间】:2015-11-13 09:53:42 【问题描述】:

我自定义了自己的 tableview,它包含几个部分,每个部分只包含一行。在 cellForRowAtIndexPath 中,我将 indexPath.section 存储为单元格的属性。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

     KEShowcaseTableViewCell *cell = (KEShowcaseTableViewCell*)[tableView dequeueReusableCellWithIdentifier:sectionCellIdentifier forIndexPath:indexPath];

    if( cell == nil )
        cell = [[KEShowcaseTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:sectionCellIdentifier];
    


    cell.section = indexPath.section;

    cell.horizontalTableView.backgroundColor = [UIColor clearColor];
    cell.backgroundColor = [UIColor clearColor];

    return cell;

但是,在我的 tableview 上上下滚动几次后,我发现 didEndDisplayingCell 中的单元格存储了与参数 indexPath.section 不同的 indexPath.section 值。

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
   if( cell.section != indexPath.section )
       NSLog(@"something wrong!");
   

我会发现我的 tableview 删除了仍在可见区域中的单元格。

我应该在哪里查看这个 tableview?

【问题讨论】:

你能把代码贴在cellforrowatindexpath吗? 你在哪里设置cell.section属性? 【参考方案1】:

问题可能是,这个单元格已经在 tableView 中被重用了。因此,您实际看到的单元格不是消失的单元格,而是被重复使用并显示在表格中的单元格。

如果要获取单元格,必须手动调用cellForRowAtIndexPath

【讨论】:

我同意该单元格可能已被重用...但是,didEndDisplayingCell 函数将让该单元格在我的表格视图中被删除...这将使表格视图在可见区域为空跨度> “让这个单元格被删除”是什么意思?如果要删除单元格,则需要使用 indexPaths 我的意思是单元格对象“A”可以被重用到另一个 indexPath(例如它首先在 section:0 中使用,并在 section:3 中重用)。但是,在 didEndDisplayingCell 函数(section:0)之后,section:3 上的视图将消失......它会让我的 tableview 显示错误的结果。

以上是关于UITableview 删除可见区域中的单元格的主要内容,如果未能解决你的问题,请参考以下文章

从 UITableView pagingEnabled 获取可见单元格

UITableView 删除并重新加载单元格

如何将集合视图单元格滚动到可见区域的中间

仅加载 UITableView 中的可见单元格

UITableView 要求一个在屏幕上不可见的单元格

当 UITableView 单元格中的进度条不可见时,如何更新它们