簡體   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