應(yīng)用程序跳轉(zhuǎn)詳解

1.跳轉(zhuǎn)到另一個程序的主界面

  • 每個程序都該有一個對應(yīng)的Scheme,以確定對應(yīng)的url


    Snip20160816_2.png
  • 一個程序要跳轉(zhuǎn)到(打開)另外一個程序,需要將另外一個程序的Scheme添加到自己的應(yīng)用程序白名單中(在info.plist中配置:LSApplicationQueriesSchemes,類型為數(shù)組,在數(shù)組中添加相應(yīng)的Scheme)->ios9.0開始


    Snip20160816_3.png
  • 跳轉(zhuǎn)代碼
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)
        }
        
    }
}

2.跳轉(zhuǎn)到另一個程序的指定界面

  • 完成上面程序間跳轉(zhuǎn)的相應(yīng)設(shè)置
  • 實現(xiàn)跳轉(zhuǎn)代碼(與跳轉(zhuǎn)到主頁相比,url多了參數(shù),?前面參數(shù)是目標(biāo)程序想要跳轉(zhuǎn)界面的segu標(biāo)簽,?后面是當(dāng)前程序的scheme)
  // MARK: - 跳轉(zhuǎn)微信朋友圈
    @IBAction func jumpToWeChatTimeLine(sender: AnyObject) {
        openURL("WeChat://TimeLine?xinWen")
        
    }
   // MARK: - 跳轉(zhuǎn)微信好友
    @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)
        }
       
  • 在目標(biāo)程序AppDelegate中監(jiān)聽用來跳轉(zhuǎn)的相應(yīng)信息,根據(jù)這些信息讓目標(biāo)程序自己實現(xiàn)頁面切換
extension AppDelegate {
    //監(jiān)聽當(dāng)前程序被其他程序通過什么樣的Url打開
    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
        //根據(jù)url跳轉(zhuǎn)對應(yīng)頁面
        //1.url轉(zhuǎn)化成字符串
        let urlString = url.absoluteString
        //2.獲取首頁控制器
        let rootVc = application.keyWindow?.rootViewController
        let mainVc = rootVc?.childViewControllers[0] as! ViewController
          //將url傳遞給mianVc
        mainVc.urlString = urlString
        //3.根據(jù)字符串內(nèi)容完成對應(yīng)跳轉(zhuǎn)
        if urlString.containsString("Session") {//跳轉(zhuǎn)好友
            mainVc.performSegueWithIdentifier("Session", sender: nil)
        }else if urlString.containsString("TimeLine") {//跳轉(zhuǎn)朋友圈
            mainVc.performSegueWithIdentifier("TimeLine", sender: nil)
        }
        return true
    }
}

3.如何從目標(biāo)程序的非主頁界面回到當(dāng)前(跳轉(zhuǎn)前)程序呢?

思路: 只要在目標(biāo)程序的非主頁界面知道跳轉(zhuǎn)前的程序的URL即可直接跳轉(zhuǎn),所以,這里的關(guān)鍵是如何將跳轉(zhuǎn)前的程序的URL傳遞到目標(biāo)程序的非主頁界面.

  • 在目標(biāo)控制器APPDelegate中能獲取到用來跳轉(zhuǎn)的URl信息的方法中將url傳遞給mianVC(事先定義好接收數(shù)據(jù)的屬性),如上面代碼所示.
  • 在mianVc 中將url傳遞給需要切換的控制器(事先定義好接收數(shù)據(jù)的屬性)
    //切換界面,需要來到該方法.能夠拿到切換前后的控制器
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        
        if segue.identifier == "Session" {
            let sessionVc = segue.destinationViewController as! SessionViewController
            //傳遞數(shù)據(jù)
            sessionVc.urlString = urlString
        }
    }
}
  • 在目標(biāo)控制器中根據(jù)url信息,獲取跳轉(zhuǎn)前控制器的scheme,從而得到跳轉(zhuǎn)回去的url.
class SessionViewController: UIViewController {
    
    //接收數(shù)據(jù)
 var urlString = ""
    override func viewDidLoad() {
        super.viewDidLoad()

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

}
extension SessionViewController {
    func backToStartApp() {
        //分割Url,獲取跳轉(zhuǎn)前的程序的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)
        }
        
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扼脐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子慕嚷,更是在濱河造成了極大的恐慌童漩,老刑警劉巖玉锌,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蟀伸,死亡現(xiàn)場離奇詭異僵闯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)惦银,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門咆课,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扯俱,你說我怎么就攤上這事±瑁” “怎么了迅栅?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晴玖。 經(jīng)常有香客問我读存,道長,這世上最難降的妖魔是什么呕屎? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任让簿,我火速辦了婚禮,結(jié)果婚禮上秀睛,老公的妹妹穿的比我還像新娘尔当。我一直安慰自己,他們只是感情好蹂安,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布椭迎。 她就那樣靜靜地躺著锐帜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畜号。 梳的紋絲不亂的頭發(fā)上缴阎,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機(jī)與錄音简软,去河邊找鬼蛮拔。 笑死,一個胖子當(dāng)著我的面吹牛痹升,可吹牛的內(nèi)容都是我干的语泽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼视卢,長吁一口氣:“原來是場噩夢啊……” “哼踱卵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起据过,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惋砂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绳锅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體西饵,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年鳞芙,在試婚紗的時候發(fā)現(xiàn)自己被綠了眷柔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡原朝,死狀恐怖驯嘱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喳坠,我是刑警寧澤鞠评,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站壕鹉,受9級特大地震影響剃幌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晾浴,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一负乡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脊凰,春花似錦抖棘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽础芍。三九已至,卻和暖如春数尿,著一層夾襖步出監(jiān)牢的瞬間仑性,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工右蹦, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留诊杆,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓何陆,卻偏偏與公主長得像晨汹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贷盲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容