大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
iOS界面之间的跳转方式基本有3种。
专业领域包括网站设计制作、网站制作、电子商务商城网站建设、微信营销、系统平台开发, 与其他网站设计及系统开发公司不同,创新互联公司的整合解决方案结合了帮做网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,为客户提供全网互联网整合方案。
1、改变window的根视图
[self.window setRootViewController:VC];
2、模态弹出
[self presentViewController:nextVC animated:YES completion:nil];//从当前界面到nextVC
[self dismissViewControllerAnimated:YES completion:nil];//从nextVC界面回去
3 用 UINavigationController push 进来和pop回去
[self.navigationController pushViewController:nextVC animated:YES];//从当前界面到nextVC这个界面
[self.navigationController popViewControllerAnimated:YES];//nextVC这个界面回到上一界面[self.navigationController popToRootViewControllerAnimated:YES];//回到根视图界面
//self.navigationController.viewControllers 是一个数组里面存放所有之前push过来的界面,如果想要跳回到指定界面 只需要根据索引值取出响应的界面pop回去
MainViewController *MainVC =self.navigationController.viewControllers[1]; [self.navigationController popToViewController:MainVC animated:YES];
假如有多级页面Root-A-B-C的跳转,现需要从C返回到A,做法有如下:
有人可能会说,直接pop两下就好了,like this:
❎错误姿势❌:
可以试一试,要是能达到效果算我输!!!
pop到B以后self.navigationController=nil,可以想想是为什么?(页面pop出去了,导航栏当然也跟着出去了,所以下面这个pop根本不起作用)
✅正确姿势一:
由上面错误姿势得到启发,第二个pop不是不起作用吗,那就让B页面去做pop,通知,代理,block都行
总结:虽然能实现,但是很麻烦,还需要写清动画YES还是NO,不然pop几个都有动画的页面会很突兀。
✅正确姿势二:
利用导航栈的特性,去除导航栈上面的页面
✅正确姿势三:
与第二个类似,但是是从导航栈获取vc
个人推荐使用第三种方法,第二种方法直接去除导航栈上面的页面,怕出现问题,而第三种方式是拿页面(读比写操作安全)。
尝试列出所有的页面跳转方法,有疏漏的欢迎补充。
1.UINavigationController - push pop (常用)
2.UITabBarController
微信的页面就是一个UITabBarController 和 NavigationController 合用的例子
3.(Modal)UIViewController - presentView
4.addChildViewController
期待补充