Swift 场景 userActivity NSUserActivity 传你 viewController

Posted

技术标签:

【中文标题】Swift 场景 userActivity NSUserActivity 传你 viewController【英文标题】:Swift scene userActivity NSUserActivity pass tu 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???

【问题讨论】:

这能回答你的问题吗? ***.com/questions/64162820/… 【参考方案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”

以上是关于Swift 场景 userActivity NSUserActivity 传你 viewController的主要内容,如果未能解决你的问题,请参考以下文章

我必须将目标 c 代码转换为 swift 3.0,尝试在线转换时出错

Diycode开源项目 UserActivity分析

尽管 Firebase 深层链接成功打开应用程序,但未调用“继续 userActivity”方法

java.lang.ClassCastException: com.liuyang.annocation.UserAction cannot be cast to com.liuyang.annoca

Swift,SpriteKit:释放游戏场景并重新分配新场景

struts 模型驱动