【问题标题】:How to change cell reuse behaviour?如何改变细胞重用行为?
【发布时间】:2015-08-22 09:57:31
【问题描述】:

我有一个tableView,我在其中使用单元重用。 当我快速滚动时,我可以看到一小会儿标签和以前单元格中的其他内容显示在新生成的单元格上。

对于最终用户来说,它可能看起来有问题,我正在寻找一种方法在它们可见之前缓存或称重传感器以避免这种情况。

我还写了一个reset函数:

func resetCell(cell: UITableViewCell){
        for v in cell.contentView.subviews{
            if let v = v as? UILabel{
                v.text = ""
            }else if let v = v as? UIImageView{
                v.image = nil
            }
        }
    }

但这并不成功......

有什么想法吗?

【问题讨论】:

    标签: ios objective-c iphone swift


    【解决方案1】:

    为了重置内容,您应该覆盖 UITableViewCellUICollectionViewCell 子类上的方法 - (void)prepareForReuse;。这是一个这样做的例子:

    - (void)prepareForReuse {
        _imageView.image = nil;
        _asset = nil;
    
        [super prepareForReuse];
    }
    

    此外,如果您有任何与此单元格相关的下载 - prepareForReuse 是取消它的最佳位置。

    【讨论】:

    • 谢谢,这就是我要找的!不幸的是,它带来了我没想到的其他问题(如果我快速上下滚动几次,所有内容都会消失并且不会重新出现..)
    • 能否请您展示一下您如何在tableView:cellForRowAtIndexPath: 方法中设置单元格?
    • 当然:func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell =tableView.dequeueReusableCellWithIdentifier("ConversationCell") as! ConversationCell cell.character = character[indexPath.row] cell.backgroundColor = .clearColor() cell.isVisible = isVisible return cell }
    • cell.isVisible 有什么作用?当您说“所有内容都消失并且不再出现”时,您的意思是所有单元格都变得不可见或单元格出现但没有内容可见?尝试让 cell.backgroundColor = .redColor() 只是为了调试并看看会发生什么。
    • cell.isVisible 是一个布尔值,当tableViewController 可见时设置为true,不可见时设置为false(因为单元格执行单独的网络请求,并在图片之间执行淡入淡出,我只希望这种情况发生在tableview 是可见的.. 每件事都嵌入在UIPageViewController 中,这就是为什么有时它不可见)。当我更改背景颜色时,它已正确设置..只有标签和图像不会在一段时间后重新加载
    【解决方案2】:

    您需要对单元格使用prepareForReuse 函数。然后,在此函数内部,您可以将任何文本标签重置为空字符串(或单元格中的任何其他内容)。

    这将确保当表格视图重用单元格时,您不会看到以前的单元格数据。

    【讨论】:

      【解决方案3】:
      func resetCell(inCell: UITableViewCell){
          if let cell = inCell {
              cell.contentView = nil;
              cell.removeFromSuperview();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-08-15
        • 2015-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-13
        • 2019-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多