? ? ? 今天改公司的代碼刃麸,知道怎么解決,但是不知道原因在哪酪我,bug很簡(jiǎn)單消痛,一個(gè)tableView,指定第二行的背景色為綠色都哭。點(diǎn)擊第一個(gè)按鈕時(shí)秩伞,會(huì)調(diào)用reloadRowsAtIndexPaths方法重新加載第二行,點(diǎn)擊第二個(gè)按鈕時(shí)欺矫,在tableView的最后插入一行纱新,這時(shí),問題就來了穆趴,我插入的cell的背景色也是綠色脸爱!
? ? ? 寫了個(gè)Demo,終于找出問題未妹。我們都知道cell會(huì)復(fù)用簿废,問題的關(guān)鍵就在于當(dāng)我們調(diào)用reloadRowsAtIndexPaths的時(shí)候,系統(tǒng)是重新創(chuàng)建了一個(gè)cell络它,替換掉我們想reload的cell族檬,這樣,重載之后化戳,復(fù)用池里就已經(jīng)有了一個(gè)可復(fù)用的cell单料,當(dāng)我們?cè)傧氩迦隿ell時(shí),系統(tǒng)就會(huì)從復(fù)用池里去取可用的cell(就是之前換下來的背景為綠色的cell),這樣看尼,我們插入的cell的背景就成了綠色的了递鹉。
? ? ? ?但是reloadData方法就不一樣了,他不會(huì)創(chuàng)建新的cell藏斩,會(huì)將當(dāng)前可見的cell重新走一遍代理方法躏结,也就是說,如果使用reloadData方法狰域,再插入一個(gè)cell就不會(huì)出現(xiàn)上面的問題媳拴。
這是tableView內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),我們?cè)谟玫臅r(shí)候兆览,就要多注意屈溉。