pushViewController 導航控制器入棧的方式切換頁面
presentViewController 模態切換的方式切換頁面
1:用 UINavigationController 的時候用 pushViewController:animated
返回之前的視圖 [[self navigationController] popViewControllerAnimated:YES];
push 以后會在 navigation的 left bar自動添加back按鈕,它的響應方法就是返回,所以一般不需要寫返回方法,點back按鈕即可
2:其他時候用presentModalViewController:animated
[self presentViewController:a animated:YES completion:^{
AMLog("打開Controller-A 頁面");
}];
返回之前的視圖 :
[self dismissViewControllerAnimated:YES completion:^{
AMLog("關閉當前Conrtroller ");
}];
3:切換視圖一般用不到 addSubview
UINavigationController是導航控制器,如果pushViewController的話,會跳轉到下一個ViewController,點返回會回到現在這個ViewController;
如果是addSubview的話,其實還是對當前的ViewController操作,只是在當前視圖上面又“蓋”住了一層視圖,其實原來的畫面在下面呢,看不到而已。(當然,也可以用insertSubView atIndex那個方法設置放置的層次)。
案例 :
使用 presentViewController 方法從 A -> B -> C,若想在 C 中直接返回 A,則可這樣實現
C中返回事件 :
- (void)back
{
[self dismissViewControllerAnimated:NO completion:^{
AMLog("關閉當前Conrtroller ");
}]; // 注意一定是NO
[[NSNotificationCenter defaultCenter]postNotificationName:@"backback" object:nil];
}
然后在B中 :
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(back) name:@"backback" object:nil];
-(void)back
{
[self dismissViewControllerAnimated:NO completion:^{
AMLog("關閉當前Conrtroller ");
}];
}
下面是執行順序:
push:

present:
