ios - 如何从应用程序委托(delegate)获取打开的 View

标签 ios swift xcode

我想在用户退出应用程序时产生一些功能

我在 appDelegate 文件中找到了 applicationDidEnterBackground 函数,但我无法访问现在打开的 View Controller ,因此我无法访问所需的函数 我无法使用 instantiateViewController 函数,因为它创建了一个新函数,但我需要存储在已打开的 View 中的信息

有什么方法可以调用已打开的 View Controller 实例的函数???

最佳答案

我有时有类似的要求,所以我使用静态方法创建了 UIViewController 扩展来返回“顶部”viewController。它看起来像这样:

extension UIViewController {

    static func topViewController(_ viewController: UIViewController? = nil) -> UIViewController? {
        let viewController = viewController ?? UIApplication.shared.keyWindow?.rootViewController
        if let navigationController = viewController as? UINavigationController, !navigationController.viewControllers.isEmpty {
            return self.topViewController(navigationController.viewControllers.last)
        } else if let tabBarController = viewController as? UITabBarController,
            let selectedController = tabBarController.selectedViewController {
            return self.topViewController(selectedController)
        } else if let presentedController = viewController?.presentedViewController {
            return self.topViewController(presentedController)
        }
        return viewController
    }

}

这允许您通过调用 let top: UIViewController? 来获取对正在显示的 viewController 的引用。 = UIViewController.topViewController().

关于ios - 如何从应用程序委托(delegate)获取打开的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59430107/

相关文章:

swift - 为什么在 Swift Playground 中执行的结果与在应用程序中执行的结果不同?

ios - Xcode 找不到我的单元格标识符

ios - 在动态框架中包含静态库的公共(public)头文件

ios - 将 NSObject(如 AFXAuthToken)转换为 NSData

ios - 检查数据库值是否大于 Firebase 中的本地值

ios - 在相机预览 View 上添加按钮 [BESwiftCamera lib]

ios - 区 block 的执行流程是怎样的?

ios - TableView 不显示单元格中的内容 (Swift)

ios - 在 Swift 3 中访问闭包外的数组

ios - Xcode 痛苦,语法高亮损坏