如何刷新tableViewCell上添加的一个View(不是刷新整个cell)

问题如题目所示。

场景:当前tableviewcell是由三个view拼接而成的,加在cell.contentView上。刷新的时候我只需要刷新其中一个cell的一个view里的内容。
但是执行刷新cell方法,是三个view是一起刷新的,导致数据不变的view会闪一下。
请问各位这种场景如何优化?

阅读 7.6k
6 个回答

首先很感谢大家的回答,今天看到还有人回复这个问题,我坐下补充

对这个问题,有一点需要更正:
1、出现刷新闪动问题的是CollectionViewCell,我当时以为tableView也会有同样的问题,所以问题里写成了tableViewCell。实时证明,我当时的场景tableView不会出现闪动问题。

解决方案:
1、针对原问题CollectionViewCell闪动,是由于CollectionView隐式动画引起的,可以这样写:

    //关闭隐式动画,防止cell闪动
    [UIView performWithoutAnimation:^{
        [self reloadItemsAtIndexPaths:@[indexP]];
    }];

更多关掉隐式动画方案:http://adad184.com/2015/11/10...
2、针对tableViewCell的刷新,可以在自定义cell写一个方法实现,但是滑动到可见范围之外再回来,状态会回复(因为走了tableView:tableViewcellForRowAtIndexPath)。如果要保持cell的状态不改变只能通过reload方式实现,就是更新数据源。

如果使用self.tableView reloadRowsAtIndexPaths: withRowAnimation:刷新会闪,考虑是否是 布局改变了,检测下layoutSubviews,或者重新创建了视图此视图的开销比较大,优化FPS及缓存cell高度

新手上路,请多包涵

你得通过数据源来控制呀,不要单独从view上去考虑,data关系到cell的重用问题

新手上路,请多包涵

1.自定义 cell 写个方法 - (void)refreshUI;

  1. 在 cell 里实现这个方法

  • (void)refreshUI {

    ... 更新你 cell 上View的操作

    }

  1. 当你想刷新 view 时调用- (void)refreshUI;

可以用一个三方 里面有对cell的分类 调用哪个方法就可以了

新手上路,请多包涵

可以看看 MVVM ,通过数据绑定更新了 viewModel 相应的 view 就会更新

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题