2013-05-03 67 views
1

我對UIViewController中的幾件事情感到非常困惑,我已經閱讀了View Controller Programming Guide,並在互聯網上搜索了很多,但仍然感到困惑。我對於UIViewController中的幾件事情感到很困惑

當我想跳轉或從firstVC切換到​​有多少類型的方法可用?我列出我知道:

  1. UINavigationController

  2. UITabBarController

  3. presentModalViewController:

  4. 添加secondVC到根視圖

    • 如果secondVC被添加到根視圖那麼firstVC對象將如何被釋放?
    • 添加想要跳轉/切換到根視圖的每個視圖是否是一種很好的做法?
  5. transitionFromView:

    • 我不明白蘋果文檔此部分:

此法修改的意見,只是他們的視圖層次。它不會以任何方式修改您的應用程序的視圖控制器。例如,對於 示例,如果您使用此方法更改由視圖控制器顯示的根視圖,則您有責任適當更新視圖控制器以處理更改。

如果我這樣做:

secondViewController *sVc = [[secondViewController alloc]init]; 

[transitionFromView:self.view toView:sVc.view... 

不過viewDidLoad:viewWillAppear:viewDidAppear:都做工精細:我不需要給他們打電話。那麼蘋果爲什麼這樣說:

它是你的責任,適當地更新視圖控制器來處理更改。

是否有其他方法可用?

回答

1

實際使用的標準方法是:

1)使用NavigationController

//push the another VC to the stack 
[self.navigationController pushViewController:anotherVC animated:YES]; 

//remove it from the stack 
[self.navigationController popViewControllerAnimated:NO]; 

//or presenting another VC from current navigationController  
[self.navigationController presentViewController:anotherVC animated:YES completion:nil]; 

//dismiss it 
[self.navigationController dismissViewControllerAnimated:YES completion:nil]; 

2)呈現VC

//presenting another VC from current VC  
[self presentViewController:anotherVC animated:YES completion:nil 

//dismiss it 
[self dismissViewControllerAnimated:YES completion:nil]; 

不要使用您在點4所描述的方法,這不是一個很好的實踐來動態改變根視圖控制器。窗口的根VC通常在applicationdidfinish之後定義,然後在選擇後選擇它,如果你要遵循apple標準,就不應該改變它。對於transitionFromView

實施例:toView

-(IBAction) anAction:(id) sender { 
// assume view1 and view2 are some subviews of self.view 
// view1 will be replaced with view2 in the view hierarchy 
[UIView transitionFromView:view1 
        toView:view2 
        duration:0.5 
        options:UIViewAnimationOptionTransitionFlipFromLeft 
       completion:^(BOOL finished){ 
        /* do something on animation completion */ 
        }]; 
    } 

}