繁体   English   中英

获取最高的 UIViewController(如果以模态方式呈现)

[英]Get top most UIViewController if its presented modally

我已经使用vc.modalPresentationStyle =.fullScreen模态地呈现了一个 ViewController

但是,当我尝试使用下面的代码获取最高视图 controller 时,它返回 nil。

func getTopViewController() -> UIViewController? {
    var topController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController
    while topController?.presentedViewController != nil {
        topController = topController?.presentedViewController
    }
    return topController
}

如果我使用vc.modalPresentationStyle =.fullScreen呈现它, topController?.presentedViewController将返回 nil,如果我使用默认呈现样式,它的工作正常。

有没有人遇到同样的问题,任何帮助将不胜感激。

我已经创建了这个扩展以获得最顶层的 controller

   extension UIViewController {
    var 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
    }
}

extension UIApplication {
    var topMostViewController : UIViewController? {
        return self.keyWindow?.rootViewController?.topMostViewController
    }
}

希望这对你有用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM