比较
- push与present都可以推出新的界面。
- present与dismiss对应,push和pop对应。
- present只能逐级返回,push所有视图由视图栈控制,可以返回上一级,也可以返回到根vc,其他vc。
- present一般用于不同业务界面的切换,push一般用于同一业务不同界面之间的切换
使用
- 在使用UINavigationController时,用
[self.navigationController pushViewController:XXXVC animated:YES];
进入下一个视图,返回时只需要点击 navigation的 left bar的back按钮或者使用[self.navigationController popViewControllerAnimated:YES];
返回上一个视图 - 其他情况下,使用
[self presentViewController:XXXVC animated:YES completion:nil];
进入下一个视图
用[self dismissViewControllerAnimated:YES completion:nil];
返回上一个视图
pop可以直接返回到上一层:[self.navigationController popViewControllerAnimated:YES];
也可以返回到某一层:
//返回到根控制器
[self.navigationController popToRootViewControllerAnimated:YES];
//返回到指定控制器
[self.navigationController popToViewController:vcHome animated:YES];
视图转化的demo
从A视图present到B视图(有navigationController),再从B视图push到C视图
A视图控制器中
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
_pressBtn = [UIButton buttonWithType:UIButtonTypeSystem];
[self.view addSubview