前言
在ios开发的过程中,我们经常会遇到比如需要从一个应用程序a跳转到另一个应用程序b的场景。这就需要我们掌握ios应用程序之间的相互跳转知识。下面我们就常用到的几种跳转情况进行介绍。
一、跳转到另一个程序的主界面
每个程序都该有一个对应的scheme,以确定对应的url
一个程序要跳转到(打开)另外一个程序,需要将另外一个程序的scheme添加到自己的应用程序白名单中(在info.plist中配置:lsapplicationqueriesschemes,类型为数组,在数组中添加相应的scheme)->ios9.0开始
跳转代码
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开发者们有所帮助,如果有疑问大家可以留言交流。