UICollectionView reloadData() 不刷新

问题:
给UICollectionView添加一个下拉刷新控件(UIRefreshControl),添加完下拉刷新执行方法后下拉不刷新

尝试方法:
1:直接添加self.reloadInputViews()
看到有人讲reloadData()方法不能直接调用,需要调用该方法,试过不行

2:添加reloadSections()方法
我看到这个方法时猜想应该可以。遂添加,添加完下拉刷新居然先闪屏?重要的是数据并没有刷新,弃之

3:添加cell.setNeedsLayout()方法
猜想这个方法也可以,都已经重新绘制了应该可以刷新数据。遗憾的是仍然不行

猜想过程:
上面几个方法试过后均不行,仍然寻找。看到了一个这样的帖子,里面内容讨论的是不是因为代理方法没走而导致数据没刷新的结果。这给了思路。UICollectionView能接触到数据源的地方无外乎就那几个代理方法,每个方法里面都打印来排查应该没问题。检查过程如下:

  • 在未下拉刷新前打印数据源的数据(初始化数据)
  • 在更新数据的方法更新后立刻打印数据(更新前先调用removeAll()
  • reloadData()方法调用后立刻打印数据源内的数据
  • 在DataSource内的返回cell对象的方法内打印数据源的数据

检查结果如下:

  • 第一步检查数据正常,为初始化数据
  • 第二步检查数据正常,为更新数据
  • 第三步检查数据正常,为更新数据
  • 第四步检查数据异常,为初始化数据

现在问题很明了,在非UICollectionView的回调方法内数据都正常,但其回调方法内数据却没更新,问题就出在这了。

解决方法:
先扯一句题外话,Android里面RecyclerView控件可以通setAdapter()设置数据源来达到更新数据的效果(不推荐,正确做法是先更新泛型集合,再notify),DataSource与Adapter的作用力不是类似的吗?通过重新设置DataSource对象行不行?

dataSource = DataSource(dataSource: dataArray)
self.collectionView.dataSource = dataSource
self.collectionView.reloadData()

试了一下可以正常运行。遂多下拉几下刷新(Android里面过于频繁设置Adapter会造成适配器异常),也没事。当然这只是目前的缓兵之计,限于时间原因并没有深入研究,有兴趣的读者可共同探讨。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值