2013-01-09 149 views
1

我現在用的是遏制API創建自定義的容器視圖控制器在家長的viewDidLoad中父視圖控制器自定義容器視圖控制器

創建和設置子視圖控制器:

[self addChildViewController:newA]; 
[self addChildViewController:newB]; 
[self addChildViewController:newC]; 

現在,一旦這些childVC已添加我可以使用過渡:

[self transitionFromViewController:from 
        toViewController:to 
          duration:1.0 
          options:UIViewAnimationOptionTransitionFlipFromLeft 
         animations:nil 
         completion:^(BOOL b){ 
          [to didMoveToParentViewController:self]; 
          [from.view removeFromSuperview]; 
          [from removeFromParentViewController]; 
         }]; 

我現在的問題是,我必須刪除日e從父VC當前的childVC顯示新的VC?

     completion:^(BOOL b){ 
          [to didMoveToParentViewController:self]; 
          [from.view removeFromSuperview]; 
          [from removeFromParentViewController]; 
         } 

有沒有我可以保留這些childVCs'和根本就刷卡/按鈕行動,那麼這些childVCs之間進行導航的方法嗎?

+1

我知道現在你已經掌握了自定義的容器視圖控制器,但只爲在這個老問題上的清晰度,不要忘了爲每個'addChildViewController'調用'[newA didMoveToParentViewController:self]''。當你添加時,在完成時調用'didMove ...'(不只是在轉換時)。當你移除時,在你做之前調用'willMove ...:nil'。請參閱[添加和刪除子項](http://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html#//apple_ref/doc/uid/TP40007457-CH18-SW13) – Rob

+1

致電'didMoveToParentViewController'和'willMoveToParentViewController'是你執行'addChildViewController'和'removeFromParentViewController'時的函數,當你執行'transitionFromViewController'時不__。 – Rob

+0

再次感謝您的幫助......你在本週末多次幫助我......所以根據你所說的我在'完成'塊中遺漏'willMove ...:nil'? – jacobronniegeorge

回答

1

因此,您不需要手動從視圖層次結構中刪除from視圖控制器的視圖。該方法在完成動畫塊後爲您處理。從這個方法的文檔:

此方法添加第二視圖控制器的視圖到視圖 層次結構,然後執行在你的動畫 塊中定義的動畫。動畫完成後,它會從視圖層次結構中刪除控制器的第一個視圖。

一個簡單的警告這一點,雖然,動畫塊不能NULL,因爲它是在你的代碼示例(他這樣說,你有nil,不NULL,這沒有任何意義,因爲animations參數一個塊,而不是一個Objective-C對象)。

UPDATE:根據您的實現,viewDidLoad可能會反覆,如果該視圖的內存被清理調用。舉例來說,一個UITabBarController通常只要在將VC添加到標籤欄時調用viewDidLoad,然後在此之後調用viewWill/DidAppear。同樣,UINavigationController在彈出視圖控制器時不會調用viewDidLoad,因爲它一直將其保留在其導航堆棧中,但如果彈出VC並將其重新打開(通常),將調用viewDidLoad。如果你沒有得到你想要的行爲,你可以在你的容器實現中繼承這個方法。

** 注意我除去你的問題iphone-SDK-4.0標籤,作爲遏制API沒有成爲可用,直到5.0

+0

我應該寫的更好(我會編輯)我不一定關心刪除...我的問題更多圍繞是否有必要刪除它,我可以保存在內存中,這樣我就可以轉換而無需加載並超過 – jacobronniegeorge

+0

正如我所說,這個方法將自動處理在動畫完成時從超級視圖中移除第一個視圖。查看我的編輯瞭解更多細節。 – jmstone617

相關問題