2011-06-08 40 views
8

如何在UITableview的動畫完成後採取行動?IOS UITableview如何在表格動畫完成後採取行動

我試圖縮小UITableview單元格,並刪除收縮後不可見的單元格的子視圖。爲了縮小單元格,我調用了[tableview beginUpdates]和[tableview endUpdates],並更改了UITableview的heightForRowAtIndexPath數據源方法返回的單元格的高度。

面臨的挑戰是,我需要tableview來完成縮小,以便在刪除子視圖之前子視圖看不見。如果我把代碼從調用[tableview endUpdates]之後(或之前或之間)刪除子視圖,那麼子視圖被過早刪除(它不會等待動畫)並且看起來很有趣。

我的想法是我希望能夠建立在動畫完成後運行的回調,並刪除子視圖在回調

+3

我發現至今運行performSelector在很短的時間延遲的最好的事情: [自performSelector:@selector(removeSubmenuViewFromCellView)withObject:無afterDelay:0.3]; – kris 2011-06-09 19:14:14

+1

完成。感謝提示 – kris 2014-03-20 23:28:22

回答

19

這是怎麼回事?

[CATransaction begin]; 

[CATransaction setCompletionBlock:^{ 
    // animation has finished 
}]; 

[tableView beginUpdates]; 
// shrink the cells 
[tableView endUpdates]; 

[CATransaction commit]; 
+0

謝謝你的建議魯道夫。我不確定什麼時候有機會審查這個問題,因爲我已經處理了這個問題已經有一段時間了。但是,如果其他人可以評論這是一個很好的解決方案,或者我可以嘗試一下,我會將其標記爲答案。與此同時,+1。 – kris 2013-02-04 19:58:03

+0

這是一個很好的解決方案。剛剛爲我工作,我需要的代碼才能在表格行被動畫之後運行。 – Andrew 2013-02-08 14:30:52

+2

好的解決方法,這個答案應該被接受。 – Bringo 2013-03-07 21:29:54

-4

嘗試使用NSNotifications類。發佈通知,當有事情發生時,以及事後發生。您可以使用相同通知方法中的bool在「即將發生」和「已發生」之間切換。

+0

(如果此評論是重複,請原諒)我的理解是,存在的一個UITableview通知與此無關,因此註冊並不會有幫助。至於自己創建通知,我希望通知在tableview完成動畫後立即發佈,但像原始問題所述,我不知道如何運行代碼(發佈通知或以其他方式)。 – kris 2011-06-09 19:13:25

+0

發佈通知非常簡單..只需檢查蘋果文檔的相同。提供了清晰準確的解釋。一切順利您的任務。 – SeriousSam 2011-06-13 08:30:07

+0

我只是說在這種情況下通知不會有用:)感謝所有的反饋! – kris 2011-06-15 13:30:44