2012-05-08 51 views
4

根據視圖控制器上的iOS文檔編寫自定義視圖控制器容器,並且我正在努力尋找一種優雅的方式來呈現第一個視圖控制器,該視圖控制器也轉發相關顯示消息如viewWillAppear:自動。如何在視圖控制器容器中顯示第一個視圖控制器

當我嘗試transitionFromViewController:toViewController:duration:options:animations:completion:fromViewController:nil我得到一個錯誤。我使用UIView動畫塊將視圖動畫化爲視圖層次結構。這似乎打破了外觀方法的自動轉發,意味着我有責任在適當的時候撥打viewWillAppear:ViewDidAppear:。是否有更高效的方法將第一個視圖轉換到負責外觀和旋轉方法的屏幕上?

我的代碼在第一個視圖控制器中看起來有點類似於動畫。

self.visibleViewController = [[UIViewController alloc] init]; 
[self addChildViewController:self.visibleViewController]; 

[self.visibleViewController viewWillAppear:YES]; 
[self.visibleViewController.view setAlpha:0]; 
[self.view addSubview:self.visibleViewController.view]; 

[UIView animateWithDuration:0.5 
         delay:0 
        options:UIViewAnimationOptionCurveEaseOut 
       animations:^{ 
        self.visibleViewController.view.alpha = 1; 
       } 
       completion:^(BOOL finished){ 
        [self.visibleViewController viewDidAppear]; 
        [self.visibleViewController didMoveToParentViewController:self]; 
       }]; 
+0

你有沒有找到這個解決方案?我遇到了同樣的問題... –

+0

不,對不起。我剛剛做了viewWillAppear和viewDidAppear自己的第一個視圖控制器。 – jackslash

回答

2

答案就在那裏隱藏在文檔中。

UIViewController的文檔

- (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated

和同伴

- (void)endAppearanceTransition

他們的文件說,從來沒有叫viewWillAppear和這樣從自己的代碼。您可以用這些方法正確啓動鏈條。

0

您確保系統不會發送你的孩子視圖控制器viewWillAppear中/ viewDidAppear/DidMoveToParentViewController消息?蘋果文檔的該位意味着它不:

爲了讓iOS的路由事件正常兒童視圖控制器 和那些控制器管理的意見,你的容器視圖控制器 必須在子視圖控制器與自身關聯然後將 子級的根視圖添加到視圖層次結構中。

,我讀了,如果你添加一個視圖控制器作爲一個孩子,那麼孩子的根視圖添加到您的視圖的方式,爲您添加視圖控制器系統應該發送相應的信息。

嘗試取出您對這些方法的手動調用,並在您的子視圖控制器中設置斷點以查看它們是否仍然被調用。

+0

他們手動撥打電話不會在那裏,如果這工作就像它應該。如果視圖插入層次結構'transitionFromViewController:toViewController:duration:options:animation:completion:',儘管文檔說了什麼,外觀方法似乎只會被調用。 – jackslash

相關問題