iOS应用程序之间的几种跳转情况详解

 更新时间:2016年09月28日 11:55:08   作者:鲲鹏DP  
这篇文章给大家详细介绍了iOS应用程序之间跳转的几种情况,包括跳转到另一个程序的主界面、跳转到另一个程序的指定界面以及如何从目标程序的非主页界面回到当前(跳转前)程序呢?有需要的朋友们可以下面来一起看看。

前言

在iOS开发的过程中,我们经常会遇到比如需要从一个应用程序A跳转到另一个应用程序B的场景。这就需要我们掌握iOS应用程序之间的相互跳转知识。下面我们就常用到的几种跳转情况进行介绍。

一、跳转到另一个程序的主界面

每个程序都该有一个对应的Scheme,以确定对应的url


一个程序要跳转到(打开)另外一个程序,需要将另外一个程序的Scheme添加到自己的应用程序白名单中(在info.plist中配置:LSApplicationQueriesSchemes,类型为数组,在数组中添加相应的Scheme)->ios9.0开始


跳转代码

extension ViewController {

 @IBAction func jumpToXinWen(sender: AnyObject) {
  openURL("xinWen://")

 }
 private func openURL (urlString : String) {
  let url = NSURL(string: urlString)!
  if UIApplication.sharedApplication().canOpenURL(url) {
   UIApplication.sharedApplication().openURL(url)
  }

 }
}

二、跳转到另一个程序的指定界面

完成上面程序间跳转的相应设置

实现跳转代码(与跳转到主页相比,url多了参数,?前面参数是目标程序想要跳转界面的segu标签,?后面是当前程序的scheme)

 // MARK: - 跳转微信朋友圈
 @IBAction func jumpToWeChatTimeLine(sender: AnyObject) {
  openURL("WeChat://TimeLine?xinWen")

 }
 // MARK: - 跳转微信好友
 @IBAction func jumpToWeChatSession(sender: AnyObject) {
  openURL("WeChat://Session?xinWen")

 }
 private func openURL (urlString : String) {
  let url = NSURL(string: urlString)!
  if UIApplication.sharedApplication().canOpenURL(url) {
   UIApplication.sharedApplication().openURL(url)
  }

在目标程序AppDelegate中监听用来跳转的相应信息,根据这些信息让目标程序自己实现页面切换

extension AppDelegate {
 //监听当前程序被其他程序通过什么样的Url打开
 func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
  //根据url跳转对应页面
  //1.url转化成字符串
  let urlString = url.absoluteString
  //2.获取首页控制器
  let rootVc = application.keyWindow?.rootViewController
  let mainVc = rootVc?.childViewControllers[0] as! ViewController
   //将url传递给mianVc
  mainVc.urlString = urlString
  //3.根据字符串内容完成对应跳转
  if urlString.containsString("Session") {//跳转好友
   mainVc.performSegueWithIdentifier("Session", sender: nil)
  }else if urlString.containsString("TimeLine") {//跳转朋友圈
   mainVc.performSegueWithIdentifier("TimeLine", sender: nil)
  }
  return true
 }
}

三、如何从目标程序的非主页界面回到当前(跳转前)程序呢?

思路: 只要在目标程序的非主页界面知道跳转前的程序的URL即可直接跳转,所以,这里的关键是如何将跳转前的程序的URL传递到目标程序的非主页界面.

     在目标控制器APPDelegate中能获取到用来跳转的URl信息的方法中将url传递给mianVC(事先定义好接收数据的属性),如上面代码所示.

     在mianVc 中将url传递给需要切换的控制器(事先定义好接收数据的属性)

 //切换界面,需要来到该方法.能够拿到切换前后的控制器
 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

  if segue.identifier == "Session" {
   let sessionVc = segue.destinationViewController as! SessionViewController
   //传递数据
   sessionVc.urlString = urlString
  }
 }
}

在目标控制器中根据url信息,获取跳转前控制器的scheme,从而得到跳转回去的url.

class SessionViewController: UIViewController {

 //接收数据
 var urlString = ""
 override func viewDidLoad() {
  super.viewDidLoad()

  navigationItem.leftBarButtonItem = UIBarButtonItem(title: "退回跳前应用", style: .Plain, target: self, action: #selector(backToStartApp))

 }

}
extension SessionViewController {
 func backToStartApp() {
  //分割Url,获取跳转前的程序的scheme

  let scheme = urlString.componentsSeparatedByString("?")[1]
  print(scheme)
  //拼接字符串
  let backString = "\(scheme)://"
  //打开url
  openURL(backString)
 }


 private func openURL (urlString : String) {
  let url = NSURL(string: urlString)!
  if UIApplication.sharedApplication().canOpenURL(url) {
   UIApplication.sharedApplication().openURL(url)
  }

 }

}

总结

以上就是关于iOS应用程序之间跳转的全部内容,希望能对各位iOS开发者们有所帮助,如果有疑问大家可以留言交流。

相关文章

  • iOS自定义字体设置和系统自带的字体详解

    iOS自定义字体设置和系统自带的字体详解

    这篇文章主要给大家介绍了关于iOS自定义字体设置和系统自带的字体的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • IOS 创建并发线程的实例详解

    IOS 创建并发线程的实例详解

    这篇文章主要介绍了IOS 创建并发线程的实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • iOS 10拨打系统电话弹出框延迟出现问题的解决

    iOS 10拨打系统电话弹出框延迟出现问题的解决

    iOS10的到来,带来了条幅和锁屏界面的重新设计,美观又好看,再加上抬腕唤醒功能,查看需要的信息确实更便捷了,还能快捷回复一些通知,十分轻松,但同样有问题,下面这篇文章主要给大家介绍了关于iOS 10拨打系统电话弹出框延迟出现问题的解决方法,需要的朋友可以参考下。
    2017-10-10
  • iOS如何优雅地消除应用角标详解

    iOS如何优雅地消除应用角标详解

    关于应用角标相信大家应该都有所了解吧,这篇文章主要给大家介绍了关于iOS如何优雅地消除应用角标的相关资料,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • IOS缓存管理之YYCache使用详解

    IOS缓存管理之YYCache使用详解

    这篇文章主要介绍了IOS缓存管理之YYCache使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • iOS开发学习之监测程序的崩溃次数详解

    iOS开发学习之监测程序的崩溃次数详解

    iOS开发中遇到程序崩溃是很正常的事情,下面这篇文章主要给大家介绍了关于iOS如何监测程序崩溃次数的相关资料,文中通过详细的示例代码供大家参考学习,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-07-07
  • 深入了解iOS开发中UIWindow的相关使用

    深入了解iOS开发中UIWindow的相关使用

    这篇文章主要介绍了深入了解iOS开发中UIWindow的相关使用,以及iOS8以后产生的相关变化,需要的朋友可以参考下
    2015-10-10
  • 全面解析Objective-C中的block代码块的使用

    全面解析Objective-C中的block代码块的使用

    这篇文章主要介绍了Objective-C中的block代码块的使用,包括闭包等重要特性的讲解,需要的朋友可以参考下
    2015-11-11
  • 学习iOS开关按钮UISwitch控件

    学习iOS开关按钮UISwitch控件

    这篇文章主要为大家详细介绍了iOS开关按钮UISwitch控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Objective-C 代码与Javascript 代码相互调用实例

    Objective-C 代码与Javascript 代码相互调用实例

    这篇文章主要介绍了Objective-C 代码与Javascript 代码相互调用实例的相关资料,现在的APP 应用有时候会调用网页上的内容,为了增加用户体验,这里写下个实例,需要的朋友可以参考下
    2016-10-10

最新评论