2013-05-20 93 views
4

我正在關注Apple's guide來構建自己的自定義容器視圖控制器。它看起來工作得很好,除了一個令人煩惱的問題。中繼外觀方法正確調用自定義容器視圖控制器

我該如何指定我的子視圖控制器在哪個時間將收到viewWillAppear:viewDidAppear:調用(及其對應的disappear)?

比方說,我有一個幻想的孩子滑入父母或類似的動畫。很自然,我想在動畫開始時調用viewWillAppear:YES,並在結束時調用viewDidAppear:YES。但是,默認情況下,在將孩子的視圖添加到家長的視圖中時,同時調用viewWillAppear:NOviewDidAppear:NO

現在,我知道有beginAppearanceTransition:animated:endAppearanceTransition方法,在iOS 6中添加的,但我想支持的iOS 5,它也好像他們是爲了在先進的情況下使用:

一旦將一個孩子添加到一個容器中,一旦事件發生需要消息被轉發, 會自動將旋轉和外觀回調轉發給子視圖 控制器。這通常是您想要的行爲,因爲它確保 所有事件都已正確發送。但是,有時默認的 行爲可能會按照您的容器的 沒有意義的順序發送這些事件。例如,如果多個子項同時更改其視圖狀態,則可能需要合併所有更改,以便 外觀回調全部同時發生在更多 邏輯順序中。要做到這一點,您需要修改您的容器類別,以承擔外觀或旋轉回調的責任 。

還有transitionFromViewController:toViewController:duration:options:animations:completion:方法,在適當的時候調用外觀的方法,但它需要在動作二視圖控制器,一般在這裏看出來的地方。當然,我可以做的伎倆,餵它一個虛擬的孩子,但嚴重...

有什麼我失蹤?任何幫助將不勝感激。

回答

3

答案很有趣。

文檔可能會說beginAppearanceTransition:animated:endAppearanceTransition在iOS 6+中可用,但事實並非如此。這些方法就好了iOS 5中以及使用方法:

- (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0); 
- (void)endAppearanceTransition __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0); 

This question's answer也指出了同樣的事情。案件解決了!

相關問題