服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS应用程序之间的几种跳转情况详解

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

2021-02-02 15:54鲲鹏DP IOS

这篇文章给大家详细介绍了iOS应用程序之间跳转的几种情况,包括跳转到另一个程序的主界面、跳转到另一个程序的指定界面以及如何从目标程序的非主页界面回到当前(跳转前)程序呢?有需要的朋友们可以下面来一起看看。

前言

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

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

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

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

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

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

跳转代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 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中监听用来跳转的相应信息,根据这些信息让目标程序自己实现页面切换

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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传递给需要切换的控制器(事先定义好接收数据的属性)

?
1
2
3
4
5
6
7
8
9
10
//切换界面,需要来到该方法.能够拿到切换前后的控制器
 override func prepareforsegue(segue: uistoryboardsegue, sender: anyobject?) {
 
  if segue.identifier == "session" {
   let sessionvc = segue.destinationviewcontroller as! sessionviewcontroller
   //传递数据
   sessionvc.urlstring = urlstring
  }
 }
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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开发者们有所帮助,如果有疑问大家可以留言交流。

延伸 · 阅读

精彩推荐
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28