我对UIViewController
中的一些事情感到很困惑,我已经阅读了View Controller Programming Guide并在互联网上搜索了很多内容但仍感到困惑。
当我想跳转或从firstVC
切换到secondVC
时,有多少种方法可用?我列出了我知道的事情:
UINavigationController
UITabBarController
presentModalViewController:
将secondVC添加到根视图
transitionFromView:
此方法仅修改视图层次结构中的视图。确实如此 不以任何方式修改应用程序的视图控制器。对于 例如,如果使用此方法更改a显示的根视图 查看控制器,您有责任更新视图 控制器适当地处理变化。
如果我这样做:
secondViewController *sVc = [[secondViewController alloc]init];
[transitionFromView:self.view toView:sVc.view...
仍viewDidLoad:
,viewWillAppear:
,viewDidAppear:
工作正常:我无需打电话给他们。那么为什么Apple会说这个:
您有责任相应地更新视图控制器以处理更改。
还有其他方法吗?
答案 0 :(得分: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点中描述的方法。动态更改根视图控制器不是一个好习惯。 window的根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 */
}];
}
}