iOS pushViewController 和 presentViewController的區別 詳解


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:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM