关于tableView的reloadRowsAtIndexPaths

      今天改公司的代码,知道怎么解决,但是不知道原因在哪,bug很简单,一个tableView,指定第二行的背景色为绿色。点击第一个按钮时,会调用reloadRowsAtIndexPaths方法重新加载第二行,点击第二个按钮时,在tableView的最后插入一行,这时,问题就来了,我插入的cell的背景色也是绿色!

      写了个Demo,终于找出问题。我们都知道cell会复用,问题的关键就在于当我们调用reloadRowsAtIndexPaths的时候,系统是重新创建了一个cell,替换掉我们想reload的cell,这样,重载之后,复用池里就已经有了一个可复用的cell,当我们再想插入cell时,系统就会从复用池里去取可用的cell(就是之前换下来的背景为绿色的cell),这样,我们插入的cell的背景就成了绿色的了。

       但是reloadData方法就不一样了,他不会创建新的cell,会将当前可见的cell重新走一遍代理方法,也就是说,如果使用reloadData方法,再插入一个cell就不会出现上面的问题。

这是tableView内部的实现细节,我们在用的时候,就要多注意。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容