如何在急速4

时间:2018-05-08 01:50:16

标签: uiviewcontroller appdelegate swift4.1

我正在使用Swift 4.1,我想知道如何传递这里给出的url数据:

func application(_ app: UIApplication, open url: URL,
                    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
}

进入我的UIViewController的子类我调用了HotSpotRISViewController。以下是我的尝试:

func application(_ app: UIApplication, open url: URL,
                    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let vc = HotSpotRISViewController()
    vc.setURL(theURL: url)
    let navigationController = UINavigationController(rootViewController: vc)
    self.window!.rootViewController = navigationController

}

我的HotSpotRISViewController包含此功能:

func setURL(theURL: URL) {
    self.url = theURL
    print(self.url ?? "nil")
}

在我的HotSpotRISViewController中,我有一个URL类型的属性可以设置。上面的代码正确传递了信息,因为我的print语句打印出了URL,但是我得到的是黑屏而不是我的应用程序。我错过了什么?然后另一方面,以下使应用程序正确启动但我不知道如何使用此方法传递url数据:

func application(_ app: UIApplication, open url: URL,
                    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let initialViewController = mainStoryboard.instantiateInitialViewController()
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = initialViewController
    self.window?.makeKeyAndVisible()
}

我想知道如何在没有黑屏的情况下正确启动我的应用并传递网址数据。谢谢。

1 个答案:

答案 0 :(得分:2)

您可以在appDelegate文件中添加全局变量,并使用setURL函数获取它:

在您的AppDelegate.swift

    var myurl: URL!
    ....

    func application(_ app: UIApplication, open url: URL,
                options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
        self.myurl = url
        let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = mainStoryboard.instantiateInitialViewController()
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()
    }
    ...

在您的HotSpotRISViewController.swift

func setURL(theURL: URL) {
    DispatchQueue.main.async {
        if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
            self.url = appDelegate.myurl
        }
    }