【问题标题】:Swift scene userActivity NSUserActivity pass tu viewControllerSwift 场景 userActivity NSUserActivity 传你 viewController
【发布时间】:2020-12-09 21:00:01
【问题描述】:

我有一个问题。 在“类 SceneDelegate”中

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
   let url = userActivity.webpageURL  
print(url) //result is www.mywebsite.com
}

如何将此 url 传递给我的 ViewController???

【问题讨论】:

标签: swift viewcontroller


【解决方案1】:

这取决于您拥有的视图控制器层次结构,但假设您有一个 UITapBarController 作为您的根视图控制器,并且您希望最终到达导航控制器内的视图控制器:

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    let url = userActivity.webpageURL  
    if let windowScene = scene as? UIWindowScene {
        for window in windowScene.windows {
            if let rootViewController = window.rootViewController {
                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                if  let yourVC = storyboard.instantiateViewController(withIdentifier: "YourVC") as? YourViewController,
                    let tabBarController = rootViewController as? UITabBarController,
                    let navController = tabBarController.selectedViewController as? UINavigationController {
                    yourVC.data = url
                    navController.pushViewController(yourVC, animated: true)
                }
            }
        }
    }
}

更新

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    let url = userActivity.webpageURL
    if let windowScene = scene as? UIWindowScene {
        for window in windowScene.windows {
            if let rootViewController = window.rootViewController {
                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                if let yourVC = storyboard.instantiateViewController(withIdentifier: "EventViewController") as? EventViewController,
                   let navController = rootViewController as? UINavigationController {
                    yourVC.data = url
                    navController.pushViewController(yourVC, animated: true)
                }
            }
        }
    }
}

【讨论】:

  • Hey Kevvv,我调整了这一行(让 yourVC = storyboard.instantiateViewController(withIdentifier: "EventViewController") as?EventViewController,) EventViewController 是我的第二个 ViewController,但应用程序已经打开了第一个 VC。并且在这两种情况下都不会传递数据。 (是的,我在 VC 中定义了变量 :))
  • 当你说“第二个视图控制器”时,它是标签栏控制器还是导航控制器中的第二个?如果您执行self.view.window?.rootViewController,它会显示什么?另外,您的 EventViewController 是否有一个名为 EventViewController 的故事板 ID?
  • 首先我有一个 NavigationController(初始)然后我有标准 ViewController StoryboardID (ViewController) 和第二个 ViewController,如果我粘贴 self.view.window?.rootViewController 到 StoryboardID (EventViewController)场景我遇到问题“'SceneDelegate'类型的值没有成员'view'”
  • 您必须将self.view.window?.rootViewController 粘贴到视图控制器的viewDidLoad 方法中。
  • 然后我看到了“ViewController”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多