Created
August 29, 2016 04:06
-
-
Save wanbok/a93c11eb6ece8fecdc94372976357ff4 to your computer and use it in GitHub Desktop.
TopMostViewController
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
extension UIViewController { | |
/// Returns the current application's top most view controller. | |
public class func topMostViewController() -> UIViewController? { | |
let rootViewController = UIApplication.sharedApplication().windows.first?.rootViewController | |
return self.topMostViewControllerOfViewController(rootViewController) | |
} | |
/// Returns the top most view controller from given view controller's stack. | |
class func topMostViewControllerOfViewController(viewController: UIViewController?) -> UIViewController? { | |
// presented view controller. It should be considered at the first. | |
if let presentedViewController = viewController?.presentedViewController { | |
return self.topMostViewControllerOfViewController(presentedViewController) | |
} | |
// UITabBarController | |
if let tabBarController = viewController as? UITabBarController, | |
let selectedViewController = tabBarController.selectedViewController { | |
return self.topMostViewControllerOfViewController(selectedViewController) | |
} | |
// UINavigationController | |
if let navigationController = viewController as? UINavigationController, | |
let visibleViewController = navigationController.visibleViewController { | |
return self.topMostViewControllerOfViewController(visibleViewController) | |
} | |
// child view controller | |
for subview in viewController?.view?.subviews ?? [] { | |
if let childViewController = subview.nextResponder() as? UIViewController { | |
return self.topMostViewControllerOfViewController(childViewController) | |
} | |
} | |
return viewController | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment