今天改公司的代码,知道怎么解决,但是不知道原因在哪,bug很简单,一个tableView,指定第二行的背景色为绿色。点击第一个按钮时,会调用reloadRowsAtIndexPaths方法重新加载第二行,点击第二个按钮时,在tableView的最后插入一行,这时,问题就来了,我插入的cell的背景色也是绿色!
写了个Demo,终于找出问题。我们都知道cell会复用,问题的关键就在于当我们调用reloadRowsAtIndexPaths的时候,系统是重新创建了一个cell,替换掉我们想reload的cell,这样,重载之后,复用池里就已经有了一个可复用的cell,当我们再想插入cell时,系统就会从复用池里去取可用的cell(就是之前换下来的背景为绿色的cell),这样,我们插入的cell的背景就成了绿色的了。
但是reloadData方法就不一样了,他不会创建新的cell,会将当前可见的cell重新走一遍代理方法,也就是说,如果使用reloadData方法,再插入一个cell就不会出现上面的问题。
这是tableView内部的实现细节,我们在用的时候,就要多注意。