假期写UI的时候就遇到了到底是使用present还是使用push,二者虽都可以推出新界面,但是用法等方面略有不同。
一、 present与push之间的不同点和相同点
共同点
push与present都可以推出新的界面。
不同点
present与dismiss对应,push和pop对应。
present只能逐级返回,push所有视图由视图栈控制,可以返回上一级,也可以返回到根vc,其他vc。
present一般用于不同业务界面的切换,push一般用于同一业务不同界面之间的切换。
二、二者的使用方法
present
self presentViewController: animated: completion:
这种方法就是以模态切换的方式切换页面。
返回之前的视图 [self dismissModalViewControllerAnimated:YES];
push 以后会在 navigation的 left bar自动添加back按钮,它的响应方法就是返回,所以一般不需要写返回方法,点back按钮即可。
假设是从A控制器转到B控制器,那么:
presentedViewController 就是B控制器;
presentingViewController 就是A控制器;
push
self.navigationController pushViewController: animated:
这个方法适用于在UINavigationController中切换视图,是导航控制器以入栈的方式切换页面。
返回之前的视图 [self.navigationController popViewControllerAnimated:YES];
总结:
在我理解看来,present就是UIViewController页面之间的单纯切换,而push是在UINavigationController中的页面的切换。
demo:GitHub