我有一個UITableView代表項目清單。每個項目都處於完成/撤消狀態。UITableView延遲reloadData直到動畫完成
我想將所有已完成的項目都保留在列表頂部,因此當用戶單擊已取消的項目時,我想知道該行應該放在哪裏(在當前 - 完成項目列表)並將其移動到那裏。
我想爲我的UITableView使用-moveRowAtIndexPath:toIndexPath:
來做到這一點。
它有時運作良好,在其他時間不太好。
當完成的操作在屏幕上的其他位置啓動另一個動畫時,它似乎可以正常工作。出於某種原因,這似乎是-reloadData
調用的延遲。
如果這不是真的(即唯一發生的事情是被標記爲已完成並正在移動的行),則動畫似乎通過自動調用UITableView的方法而被短路。也就是說,動畫開始,但大約一半的時候,-reloadData
被調用,行被捕捉到它們的最終位置。從用戶的角度來看,這相當震撼。
我跟蹤了我的代碼,確認我自己並沒有打電話-reloadData
,也沒有看到我是觸發此-reloadData
調用的人。
我可以自動撥打-reloadData
,我明白爲什麼會這麼叫(雖然你認爲這可能沒有必要,但這是一個不同的問題),但我真的很喜歡它,直到它完成其動畫。
下面是我使用的代碼:
NSIndexPath *oldPath = [NSIndexPath indexPathForRow:currentIndex inSection:0];
NSIndexPath *newPath = [NSIndexPath indexPathForRow:newIndex inSection:0];
[tableView beginUpdates];
[checklist removeObject:task];
[checklist insertObject:task atIndex:newIndex];
[tableView moveRowAtIndexPath:oldPath toIndexPath:newPath];
[tableView endUpdates];
上午我擰東西了?
Doh!我真的是手動調用'-reloadData'。這是微妙的,從一個計時器,這是沒有達到斷點啓用。衛生署!衛生署!衛生署! ;-) – mbm29414
請添加您的解決方案作爲對此問題的答案並接受它。 – titaniumdecoy