开发技能iOS开发技术分享iOS进阶指南

关于tableView的reloadRowsAtIndexPat

2015-12-22  本文已影响3674人  小妹呀

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

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读