swift get topmostViewController avoid UIAlertController

47 views Asked by At

i want to get topMostVC so i did this function:

    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
    }

Then called using:

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

But i have problem is when UIAlertController is showing in screen, it's return UIAlertController, not my expect viewcontroller

Can anyone tech me how to avoid UIAlertController, thanks

1

There are 1 answers

5
Raja Kishan On

Just add one more condition

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