Swift - 我想从 View Controller 中的 SceneDelegate.swift 访问信息

标签 swift

当使用AppDelegate时,这行代码将允许我在应用程序委托(delegate)和 View Controller 之间发送变量。

let firstName = AppDelegate.shared().givenName

我能为sceneDelegate做什么?

最佳答案

好吧,我建议您使用这样的用户默认值:

// Set
UserDefaults.standard.set(self.currentZoomLevel, forKey: "zoomLevel")
// Read
if let zoomLevel = UserDefaults.standard.object(forKey: "zoomLevel") as? CGFloat {
                return zoomLevel
            }

另一种方法应该是这样的

var window: UIWindow?

// On your scene delegate you have an instance variable Window
       func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
           guard let windowScene = (scene as? UIWindowScene) else { return }
           let window = UIWindow(windowScene: windowScene)
            self.window = window
}

使用 window 对象,您可以访问导航 Controller 并直接访问您的 viewController:

var wantedViewController: DesiredViewController?
    let _ = window?.rootViewController?.children.forEach({ navigation in
                if let navController = navigation as? UINavigationController {
                    if let tabBar = navController.viewControllers.filter({ viewController in
                        viewController is MyTabBarController
                    }).first {
                        if let container = tabBar.children.filter({ $0 is ContainerViewController }).first as? ContainerViewController {
                            if let innerViewController = container.children.filter({ $0 is RootViewController }).first as? RootViewController {
                                wantedViewController = innerViewController.orderedViewControllers.filter({ $0 is DesiredViewController }).first as? DesiredViewController
                            }
                        }
                    }
                }
            })

这段代码有点复杂,因为我的项目结构,我的 View Controller 位于 TabController 内,可能你的可以没那么复杂,你会发现 View Controller 更容易。 只需调试并看看它是如何发生的。

关于Swift - 我想从 View Controller 中的 SceneDelegate.swift 访问信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60032244/

相关文章:

html - UITextView HTML 为图像应用响应式 CSS

ios - AudioKit:我可以在不调用 AudioKit.stop() 的情况下禁用 AKMicrophone 吗?

ios - 一次所有 View 的 NSNotification

ios - 从 Swift IOS 套接字获取 InputStream 中的文件

ios - Swift Socket,监听传入的消息

ios - 用来自服务器的数据填充 UIPageViewController?

swift - 需要通过使用需求的特定子类(或符合它的类型)来满足 Swift 协议(protocol)需求

ipad - 如何使用 UIImage(contentsOfFile :String) with image data downloaded from the internet?

ios - 什么是 UITabBarItem *item = [self.tabBar.items objectAtIndex :1]; in swift?

ios - 解析和 Swift : logInViewController. 字段