gpt4 book ai didi

ios - 如何从 AppDelegate 获取当前可见的 viewController

转载 作者:搜寻专家 更新时间:2023-10-30 22:37:07 25 4
gpt4 key购买 nike

因此,我正在使用 UIApplication 扩展中的以下方法来获取顶 View Controller :

    class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let navigationController = controller as? UINavigationController {
return topViewController(controller: navigationController.visibleViewController)
}
if let tabController = controller as? UITabBarController {
if let selected = tabController.selectedViewController {
return topViewController(controller: selected)
}
}
if let presented = controller?.presentedViewController {
return topViewController(controller: presented)
}
return controller
}

但问题是:它总是返回UIViewController。但是我需要检查它是否是 MyViewController 例如。我该如何实现?

最佳答案

对返回值进行条件转换以安全地检查其类型。

if let currentVC = UIApplication.topViewController() as? MyViewController {
//the type of currentVC is MyViewController inside the if statement, use it as you want to
}

你的整个函数实现是有缺陷的,如果它真的有效,它会导致无限递归。一旦您在 if 语句中找到当前顶 View Controller 的类型,您将再次使用当前根 Controller 作为其输入值调用相同的函数。只有当它到达来自 View Controller 的调用时,你的函数才会存在,而 View Controller 的类不是你的可选绑定(bind)中指定的类。

此外,您的整个实现目前没有做任何事情。您找到了 Root View Controller 的类型,但是您通过返回 UIViewController 类型的值来向上转换它。

关于ios - 如何从 AppDelegate 获取当前可见的 viewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46077637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com