码迷,mamicode.com
首页 > 其他好文 > 详细

UICollectionView reloadData无法更新的奇怪问题。

时间:2014-11-12 17:52:12      阅读:765      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   使用   sp   for   

近来偶尔用到UICollectionView,对于九宫格之类的布局还是很方便的。但使用过程中却出现一个奇怪的问题,暂时没时间仔细研究。先记录。

在UICollectionViewCell中定义一个图标和一个文本,显示的效果是典型的九宫格。默认会有几条数据,点击最后一个cell会弹出编辑框添加自定义的cell。使用过程中出现的问题时,在第二行最后一个添加的自定义cell,图标怎么都改变不了。如果将整个view切换一下,显示又变成正常了。如下图:

bubuko.com,布布扣

查看打印出来的数据,是正常的。如下:

(
{
    index = 0;
    name = "\U5915\U9633";
    thumb = "sunset_btn_nor";
},
{
    index = 1;
    name = "\U665a\U9910";
    thumb = "dinner_btn_nor";
},
{
    index = 2;
    name = "\U770b\U7535\U89c6";
    thumb = "tv_btn_nor";
},
{
    index = 3;
    name = "\U6e29\U548c";
    thumb = "soft_btn_nor";
},
{
    index = 4;
    name = "\U51b7\U5149";
    thumb = "coldlight_btn_nor";
},
{
    index = 5;
    name = night;
    thumb = "my_btn_nor";
},
{
    index = 6;
    name = morning;
    thumb = "my_btn_nor";
},
{
    index = 7;
    name = sunset;
    thumb = "my_btn_nor";
},
{
    index = 8;
    name = "\U81ea\U5b9a\U4e49";
    thumb = "add_btn_nor";
}
)

添加断点,发现数据也没有问题。代码的处理方式是在插入或者更新数据后,调用

[collectionView reloadData];

的方法。

网上搜索,也看到有人问类似的问题。有些人给出的解决办法是加一个空的UIView在上面,强制整个collection view刷新。但感觉不是好的办法。

后来试了更新指定项,问题就不出现了。

以下两种方法均有效:

[self.collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForRow:7 inSection:0]]];

或者

[self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];


至于为什么reloadData会无效。这个暂时留下,等有空的时候再研究一下其原理。或者有牛人知道也请不吝赐教。


另外,这情况也提醒我们,能确定加载某个子项的,还是调用直接刷新指定项更好。一来效率高,二来避免出现莫名其妙的现象。



UICollectionView reloadData无法更新的奇怪问题。

标签:style   blog   http   io   color   ar   使用   sp   for   

原文地址:http://blog.csdn.net/sing_sing/article/details/41046931

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!