在单例中获得UIViewController可以通过以下步骤实现:
guard let keyWindow = UIApplication.shared.keyWindow,
let rootViewController = keyWindow.rootViewController else {
return
}
var currentViewController = rootViewController
while let presentedViewController = currentViewController.presentedViewController {
currentViewController = presentedViewController
}
// 将currentViewController赋值给单例类的静态属性
Singleton.shared.viewController = currentViewController
上述代码会遍历视图控制器层次结构,直到找到最上层的视图控制器。然后,将该视图控制器赋值给单例类的静态属性。
Singleton.shared.viewController
来访问当前的UIViewController。需要注意的是,由于单例类的初始化方法只会在应用程序启动时调用一次,因此在应用程序运行期间,Singleton.shared.viewController
可能会保持对之前显示的视图控制器的引用。如果你需要在不同的视图控制器之间切换时更新引用,可以在视图控制器切换时调用单例类的某个方法来更新引用。
这种方法适用于大多数情况下,但也有一些特殊情况需要特别处理,比如当应用程序使用容器视图控制器(如UITabBarController或UINavigationController)时。在这种情况下,你可能需要根据你的应用程序结构来调整获取UIViewController的逻辑。
推荐的腾讯云相关产品:无
希望以上信息对您有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云