Skip to content

Instantly share code, notes, and snippets.

@milanpanchal
Last active November 8, 2017 10:55
Show Gist options
  • Save milanpanchal/592f36ecaa2c372f187bad06544266f7 to your computer and use it in GitHub Desktop.
Save milanpanchal/592f36ecaa2c372f187bad06544266f7 to your computer and use it in GitHub Desktop.
To retrieve the view controller that is currently displayed in Swift
func currentViewController(_ viewController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
guard let viewController = viewController else { return nil }
if let viewController = viewController as? UINavigationController {
if let viewController = viewController.visibleViewController {
return currentViewController(viewController)
} else {
return currentViewController(viewController.topViewController)
}
} else if let viewController = viewController as? UITabBarController {
if let viewControllers = viewController.viewControllers, viewControllers.count > 5, viewController.selectedIndex >= 4 {
return currentViewController(viewController.moreNavigationController)
} else {
return currentViewController(viewController.selectedViewController)
}
} else if let viewController = viewController.presentedViewController {
return viewController
} else if viewController.childViewControllers.count > 0 {
return viewController.childViewControllers[0]
} else {
return viewController
}
}
USAGE:
=======
Call it with: currentViewController()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment