2012-03-14 52 views
1

我現在知道,如果您將視圖控制器上的動畫推到導航控制器上,您必須先等到該動畫完成後再按另一個視圖控制器,否則您會收到警告並可能會有意外的結果。檢查已完成的導航控制器動畫

如何檢查導航控制器動畫是否已完成以避免此問題?

感謝

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath 
{ 
    // ... 


    //Make sure animation has completed before sending message below 


[[self navigationController] pushViewController:detailsViewController animated:NO]; 

//... 

} 

回答

3

如果反彈要(好的運動,在許多風險投資右側)推一個VC在同一時間,你可以實現一個控制器類的UINavigationControllerDelegate(應用程序委託會做),分配它/你自己到self.navigationController.delegate。每次推送後,UINavigationController將調用navigationController:didShowViewController:animated:

-1

我用了另一種方法,對我來說工作得很好。只需在[UIView animateWithDuration:animation:completionanimations:參數中包裝pushViewController:animated:呼叫。把你需要的任何東西在完成時運行,比如推動我正在做的後續控制器,在completion:

在我的情況下,我在一個方法中運行整個事情,該方法將一個數組(NSMutableArray)與控制器列表作爲參數進行推送。在completion:塊中,該方法彈出陣列中的第一個元素(objectAtIndex:0removeObjectAtIndex:0),並使用該數組的其餘部分調用自身。

這是一個有趣continuation-passing-style實現:) 但有一件事要注意的是,在動畫的最後新的導航控制器的內容可能不完全加載,所以如果你的推是獨立的這種方法是唯一可靠的該內容。

+0

在iOS 7上,完成塊在動畫完成之前執行。 – fabb 2015-04-22 10:10:19