【问题标题】:swift get topmostViewController avoid UIAlertController快速获取 topmostViewController 避免 UIAlertController
【发布时间】:2022-01-12 08:43:56
【问题描述】:

我想获得 topMostVC 所以我做了这个功能:

    func topMostViewController() -> UIViewController {
        
        if let presented = self.presentedViewController {
            return presented.topMostViewController()
        }
        
        if let navigation = self as? UINavigationController {
            return navigation.visibleViewController?.topMostViewController() ?? navigation
        }
        
        if let tab = self as? UITabBarController {
            return tab.selectedViewController?.topMostViewController() ?? tab
        }
        
        return self
    }

然后使用:

AppDelegate.shared.window?.rootViewController?.topMostViewController()

但我的问题是当 UIAlertController 在屏幕上显示时,它返回 UIAlertController,而不是我期望的 viewcontroller

谁能告诉我如何避免 UIAlertController,谢谢

【问题讨论】:

    标签: swift uiviewcontroller topmost


    【解决方案1】:

    再添加一个条件

    if let presented = self.presentedViewController,
       !(presented is UIAlertController) { // <== Here or use !presented.isKind(of: UIAlertController.self)
        return presented.topMostViewController()
    }
    

    【讨论】:

    • 如果呈现的是 UIAlertController 那么它什么都不会返回。
    • 你是什么意思呈现的是 UIAlertController ?
    • UIAlertController 出现在屏幕上,在这种情况下它会返回什么?
    • 它返回基本控制器,这就是“如何在没有警报控制器的情况下获取控制器”的问题
    • 抱歉,我错过了阅读您的代码。谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 2011-09-29
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 2014-11-18
    相关资源
    最近更新 更多