当使用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/