大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
iOS界面之间的跳转方式基本有3种。
创新互联公司2013年开创至今,是专业互联网技术服务公司,拥有项目成都网站制作、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元墨玉做网站,已为上家服务,为墨玉各地企业和个人服务,联系电话:18982081108
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];
尝试列出所有的页面跳转方法,有疏漏的欢迎补充。
1.UINavigationController - push pop (常用)
2.UITabBarController
微信的页面就是一个UITabBarController 和 NavigationController 合用的例子
3.(Modal)UIViewController - presentView
4.addChildViewController
期待补充
假如有多级页面Root-A-B-C的跳转,现需要从C返回到A,做法有如下:
有人可能会说,直接pop两下就好了,like this:
❎错误姿势❌:
可以试一试,要是能达到效果算我输!!!
pop到B以后self.navigationController=nil,可以想想是为什么?(页面pop出去了,导航栏当然也跟着出去了,所以下面这个pop根本不起作用)
✅正确姿势一:
由上面错误姿势得到启发,第二个pop不是不起作用吗,那就让B页面去做pop,通知,代理,block都行
总结:虽然能实现,但是很麻烦,还需要写清动画YES还是NO,不然pop几个都有动画的页面会很突兀。
✅正确姿势二:
利用导航栈的特性,去除导航栈上面的页面
✅正确姿势三:
与第二个类似,但是是从导航栈获取vc
个人推荐使用第三种方法,第二种方法直接去除导航栈上面的页面,怕出现问题,而第三种方式是拿页面(读比写操作安全)。
在iOS开发中,有时会有跳转系统设置界面的需求,例如提示用户打开蓝牙或者WIFI,提醒用户打开推送或者位置权限等。在iOS6之后,第三方应用需要跳转系统设置界面,需要在URL type中添加一个Prefs值,如下图:
需要设置Prefs
设置跳转有三种方式,每一种的使用场景都不同。 并且你在跳转到系统中自己应用下面设置的时候,你的应用要提前至少申请了某一个权限,如通知,定位等。否则,会引起崩溃。
当iOS系统版本 iOS 10.0 时
当iOS系统版本 =iOS 10.0 时
当 iOS系统版本 = iOS7时 , 只能跳转到 系统设置页面
当 iOS系统版本 = iOS8 ,支持跳转到第三方应用的设置界面中
使用prefs:root=bundleID ,bundleID是你第三方应用工程的唯一ID
局限性:只支持iOS8,iOS9系统,在iOS10系统上,不会跳转。
在iOS7系统上,仅仅只是跳转到设置应用,不推荐使用。
UIApplicationOpenSettingsURLString字段,是在iOS8上才提供的,支持iOS8,iOS9,iOS10系统,推荐使用。
跳转。
而 prefs:root=bundleID和 prefs:root=服务 都将不起作用。
方式一:prefs:root=某项服务 适用于 小于 iOS10的系统;
方式二:prefs:root=bundleID 适用于 大于等于iOS8系统,小于iOS10的系统
方式三:UIApplicationOpenSettingsURLString 适用于 大于等于iOS8的系统
跳转到根视图并跳转到第一个tabbar第一个页面
// 直接跳转到跟视图
self
.navigationController.tabBarController.hidesBottomBarWhenPushed=
NO
;
self
.navigationController.tabBarController.selectedIndex=
;
//0
// 先跳转到自身tabbar主页,再跳转到第一个tabbar主页 (push出来的走这个方法)
for
(
UIViewController
*vc
in
self
.navigationController.viewControllers) {
if
([vc isKindOfClass:[TrainingProgramTableViewController
class
]]) {
[
self
.navigationController.tabBarController setSelectedIndex:
];
[
self
.navigationController popToRootViewControllerAnimated:
NO
];
}
}
在iOS开发中,页面跳转一般有两种方式:
在SDK开发中,由于需要减小侵入性,通常会使用modal方式弹出SDK的页面,那么默认唤起的动画就是从下到上。现在有一个需求,需要从右到左唤起SDK的页面,所以我们需要用到转场动画,将present的动画改成从右到左,也就是以Push方式实现Present跳转。
实现模态的转场动画的步骤,大概分以下几步:
下面按照这个步骤来实现功能
创建一个类 WBHCPushAnimatedTransition 来封装转场动画
实现系统的 UIViewControllerAnimatedTransitioning 协议
实现present动画,实际就是使用UIView动画来改变 fromVC 和 toVC 的 view 的位置
实现dismiss动画,和上面的present动画相反,将fromVC 和 toVC 的 view 的位置还原
这样,整个转场动画的封装就完成了,下面来实现代理
在要present出来的vc中实现系统代理 UIViewControllerTransitioningDelegate
这样的话,整个功能就基本实现了
但是,体验上还缺少一点:没有侧滑返回。所以,接下来,我们实现侧滑返回的交互转场
创建一个继承自 UIPercentDrivenInteractiveTransition 的类 WBHCPopInteractiveTransition 来封装交互转场
为传入的vc添加拖动手势
拖动手势是加在全屏上的,我们需要将它限制到屏幕左侧,这样才是侧滑返回,否则是全屏返回
核心是处理手势交互转场的过程,我们需要更新转场百分比 updateInteractiveTransition ,标记 完成转场 finishInteractiveTransition 和取消转场 cancelInteractiveTransition
这样,整个交互转场的封装就完成了,下面来实现代理
在要dismiss消失的vc中实现系统代理 UIViewControllerTransitioningDelegate
这样的话,整个侧滑返回的功能就实现了
至此,我们基本上就实现了以Push方式实现Present跳转,同时可以像原生导航一样进行侧滑返回