1

我真的很困惑UIViewController,我已经阅读了视图控制器编程指南并在互联网上搜索了很多但仍然感到困惑。

当我想跳转或切换firstVCsecondVC有多少种方法可用?我列出了我知道的:

  1. UINavigationController

  2. UITabBarController

  3. presentModalViewController:

  4. 将 secondVC 添加到根视图

    • 如果将 secondVC 添加到根视图,那么如何释放 firstVC 对象?
    • 添加我想跳转/切换到根视图的每个视图是一个好习惯吗?
  5. transitionFromView:

    • 我不明白 Apple doc 的这部分内容:

此方法仅修改视图层次结构中的视图。它不会以任何方式修改应用程序的视图控制器。例如,如果您使用此方法更改视图控制器显示的根视图,则您有责任适当地更新视图控制器以处理更改。

如果我这样做:

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

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

仍然viewDidLoad:, viewWillAppear:,viewDidAppear:工作正常:我不需要打电话给他们。那么为什么苹果会这样说:

您有责任适当地更新视图控制器以处理更改。

有没有其他可用的方法?

4

1 回答 1

1

实际上使用的标准方法是:

1)使用导航控制器

 //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 通常定义在 applicationdidfinishlaunchingwithoptions 之后,如果您要遵循苹果标准,则不应更改它。

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 */
                  }];
  }

}
于 2013-05-03T12:34:45.853 回答