Swift-我想从我的viewcontroller中的SceneDelegate.Swift访问信息
使用Swift-我想从我的viewcontroller中的SceneDelegate.Swift访问信息,swift,Swift,使用AppDelegate时,这行代码允许我在AppDelegate和视图控制器之间发送变量 let firstName = AppDelegate.shared().givenName 对于sceneDelegate,我能做些什么?我可以建议您使用如下用户默认设置: // Set UserDefaults.standard.set(self.currentZoomLevel, forKey: "zoomLevel") // Read if let zoomLevel = UserDefaul
AppDelegate
时,这行代码允许我在AppDelegate和视图控制器之间发送变量
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对象,您可以访问导航控制器并直接访问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
}
}
}
}
})
这段代码有点复杂,因为我在项目中的结构,我的视图控制器在TabController中,可能你的代码没有那么复杂,你会发现视图控制器更容易。
只需调试,看看它是如何发生的