跳转至应用程序中某一界面(Swift)

  • 1.上一篇写了应用程序的跳转,然后想写一个具体实现的功能
  • 需求:从一个应用程序跳转至另一个控制器的某一界面
跳转至应用程序中某一界面(Swift)_第1张图片
Demo.gif
  • 思路:获取URL再跳转至应用程序,然后再根据一个ID 让Segue跳转至不同界面
  • 问题一 : 从哪里获取URL?
  • 答:从AppDelegate中的代理方法可以获取
 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
}

正式开始项目

  • 1.创建一个项目,并且做好相关配置
跳转至应用程序中某一界面(Swift)_第2张图片
Snip20161119_1.png
  • 2.抽出一个跳转方法
private func openURL(_ URLString : String) {
        
        // 1.获取对应应用程序的URL
        guard let url = URL(string: URLString) else { return }
        
        // 2.判断URL是否可以打开
        guard UIApplication.shared.canOpenURL(url) else { return }
        
        // 3.打开对应的应用程序
        UIApplication.shared.openURL(url)
    }
  • 1."打开微信"按钮
@IBAction func openWechat() {
        openURL("wechat://")
    }
  • 2."打开微信好友界面"按钮
 @IBAction func openWeChatSession() {
        openURL("wechat://session")
    }
  • 3."打开微信朋友圈界面"按钮
@IBAction func openWeChatFriend() {

        openURL("wechat://timeline")
    }

!!最重要的是:配置info.plist

跳转至应用程序中某一界面(Swift)_第3张图片
Snip20161119_2.png

第一个项目就完成了,现在开始第二个项目

咳咳,首先搭建好界面

为了方便,我就在Main.storyboard中搭建了

跳转至应用程序中某一界面(Swift)_第4张图片
Snip20161119_3.png
跳转至应用程序中某一界面(Swift)_第5张图片
Snip20161119_4.png

绑定Segue的ID,通过segue跳转


跳转至应用程序中某一界面(Swift)_第6张图片
Snip20161119_5.png
跳转至应用程序中某一界面(Swift)_第7张图片
Snip20161119_6.png

前面说过在ViewController中那么到url,因为我们要通过传过来的url来判断跳转至哪个界面,所以直接来到AppDelegate中

 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        
        //首先,获取URL对应的URLString
        //因为获取的url是URL类型的,所以我们还需要将其转为String类型
        //absoluteString:绝对路径的String
        let URLString = url.absoluteString 
        
        //2.进行判断,根据不同的URL显示不同的界面
        //我们要通过跟控制器才能跳转至需要跳转的界面,所以现在要获取根控制器

        //获取首页控制器
        let rootNav = window?.rootViewController as? UINavigationController

        guard let homeVC = rootNav?.childViewControllers.first else {return false}

        //3.进行判断,根据不同的URL显示不同的界面
        //contains方法是判断是否包含某一字符串
        if URLString.contains("session") { 
            homeVC.performSegue(withIdentifier: "homeSession", sender: nil)
        } else if URLString.contains("timeline"){
            homeVC.performSegue(withIdentifier: "homeTimeline", sender: nil)
        }
                return true
    }

另外一个重点来了:(敲黑板)

  • 刚创建的项目没有配置URL Scheme是没有的,需要自己配置,而配置方法如下
跳转至应用程序中某一界面(Swift)_第8张图片
Snip20161119_8.png

然后就可以运行了

跳转至应用程序中某一界面(Swift)_第9张图片

这是运行图
虽然功能是实现了
有木有觉得很奇怪? 一般进入到某一界面然后点击返回,应该是返回上一界面的
猜测:应该是每次跳转的时候没有回到主界面导致的
所以每次跳转之前应该先回到主控制器

 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        
        //1.获取首页控制器
        let rootNav = window?.rootViewController as? UINavigationController
        //回到主控制器
        //在swift中popToRootViewController这个方法有个返回值,但是我们又用不上这个返回值,所以可以用一个占位符 _ 来接收
        _ = rootNav?.popToRootViewController(animated: false)
        
        guard let homeVC = rootNav?.childViewControllers.first else {return false}
        
        
        //2.获取URL对应的URLString
        let URLString = url.absoluteString
        
        //3.进行判断,根据不同的URL显示不同的界面
        if URLString.contains("session") {
            homeVC.performSegue(withIdentifier: "homeSession", sender: nil)
        } else if URLString.contains("timeline"){
            homeVC.performSegue(withIdentifier: "homeTimeline", sender: nil)
        }
        return true
    }

现在应该没问题了

跳转至应用程序中某一界面(Swift)_第10张图片
Demo3.gif

另外即使应用程序处于后台,还是关闭状态都可以正常执行

跳转至应用程序中某一界面(Swift)_第11张图片
Demo5.gif

好了,我的分享完了,睡觉咯~~~
我的个人博客 : www.summersam.com
个人微信 : bilibili9310
个人QQ : 276388000
欢迎一起交流,一起学习

你可能感兴趣的:(跳转至应用程序中某一界面(Swift))