Get top most UIViewController

后端 未结 24 2159
别那么骄傲
别那么骄傲 2020-11-22 14:47

I can\'t seem to get the top most UIViewController without access to a UINavigationController. Here is what I have so far:

UIApplic         


        
24条回答
  •  天涯浪人
    2020-11-22 15:20

    Slight Variation on @AlberZou using a computed variable rather than a function

    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
      }
    }
    

    Then say

    if let topViewControler = UIApplication.shared.topMostViewController {
        ... do stuff
    }
    

提交回复
热议问题