2011-04-07 104 views
3

所以這裏是我的情況:更新UITableViewCell無刷新

我有一個UITableView其中每個單元格有一些按鈕。
在cellForRowAtIndexPath中,我設置了行的索引路徑,所以當點擊一個按鈕時,我知道點擊了哪一行。
其中一個按鈕是一個刪除按鈕,當按下時,我刪除支持數據並從表中刪除該行。

我遇到的問題是,我刪除一行後,其他行的indexPath是不正確的,因爲其他行尚未重繪。我可以找到重繪表的唯一方法是調用reload,但是這會弄亂動畫。
我想這種問題以前必須解決。有沒有人有任何建議如何解決這個問題?如果有更好的方法,我可以改變設計按鈕的方式。

+0

你有沒有想出解決方法呢? reloadRows和reloadSections對我來說已經成爲一個可怕的問題,因爲在應該沒有的時候會出現不需要的動畫/閃光。 – SAHM 2012-04-24 18:11:52

回答

1

最好不要存儲與按鈕indexPath。在按鈕動作處理程序(它是您的單元格子類中的方法或viewController中的)中,您可以識別該單元格,然後使用-indexPathForCell:確定indexPath。

+0

自從我寫這個問題已經很長時間了,但你是正確的,這就是我現在處理事情的方式。 – skorulis 2016-01-20 22:24:23

9

認爲你需要使用這個......

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation 

Apple reference!

+0

我試過使用reloadSections版本(因爲大部分的部分是不正確的),但在這個工作上的動畫可怕。整個桌子似乎在閃爍,我可以看到桌子後面的白色。 – skorulis 2011-04-07 23:54:10

+0

也許你需要重新加載它周圍的單元格? 背後的數據是什麼,就好像你使用CoreData一樣,它爲你處理了很多這樣的事情。 – 2011-04-08 07:04:15

2

調用方法: - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

+0

我打電話給那個方法。這會正確刪除,但不會重繪其他單元,因此索引路徑不正確。 – skorulis 2011-04-07 07:38:38

2

您應該能夠通過開始和結束這樣的更新重繪tableview中沒有全部重新加載:

[tableView beginUpdates]; 
[tableView endUpdates];