国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS應用程序之間的幾種跳轉情況詳解

2020-07-26 03:10:19
字體:
來源:轉載
供稿:網友

前言

在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開發者們有所幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 资兴市| 皋兰县| 兰坪| 原平市| 惠来县| 长宁县| 和政县| 盐池县| 宁远县| 韶关市| 汤阴县| 甘洛县| 左权县| 汕尾市| 大新县| 辉县市| 肃南| 尖扎县| 双柏县| 神池县| 定陶县| 稷山县| 江津市| 禹城市| 军事| 胶南市| 青川县| 新宾| 扎赉特旗| 镇康县| 潜江市| 和政县| 昌乐县| 宣威市| 利津县| 宜都市| 龙山县| 大埔区| 黔江区| 饶阳县| 辉县市|