Skip to content

Instantly share code, notes, and snippets.

@kuotinyen
Last active December 21, 2018 09:43
Show Gist options
  • Save kuotinyen/1ceaf1e1d99f27331aa45391dc7ec363 to your computer and use it in GitHub Desktop.
Save kuotinyen/1ceaf1e1d99f27331aa45391dc7ec363 to your computer and use it in GitHub Desktop.
Find top viewController on window.

Usage

guard let view = topVC?.view else { return }

Extension

extension UIApplication {
    
    var topVC: UIViewController? {
        guard var topViewController = UIApplication.shared.keyWindow?.rootViewController else { return nil }
        
        while let presentedViewController = topViewController.presentedViewController {
            topViewController = presentedViewController
        }
        
        if let navi = topViewController as? UINavigationController {
            // NavigationControllerの場合は先頭のViewControllerを返す
            return navi.viewControllers.first
        }
        
        if let tab = topViewController as? UITabBarController {
            // TabBarControllerの場合は選択中タブのViewControllerを返す
            
            if let navi = tab.viewControllers![tab.selectedIndex] as? UINavigationController {
                // NavigationControllerの場合は先頭のViewControllerを返す
                return navi.viewControllers.first
            }
            
            return tab.viewControllers![tab.selectedIndex]
        }
        
        return topViewController
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment