UIWindow Presentation Context

There are times when we need to get top most presented UIViewController. We can do so with help of an extension of UIWindow. Consider the following code:

// https://hashaam.com/2017/08/31/uiwindow-presentation-context/
extension UIWindow {
func presentationContext(context: UIViewController? = nil) -> UIViewController? {
var presentationContextViewController = rootViewController
if let context = context {
presentationContextViewController = context
}
if presentationContextViewController?.presentedViewController == nil {
if let navigationController = presentationContextViewController as? UINavigationController {
return navigationController.topViewController
}
return presentationContextViewController
}
return presentationContext(context: presentationContextViewController?.presentedViewController)
}
}

Then we can call using:

// https://hashaam.com/2017/08/31/uiwindow-presentation-context/
if let delegate = UIApplication.shared.delegate, let window = delegate.window, let viewController = window?.presentationContext() {
// perform action on viewController
}


Posted

in

by

Comments

Leave a comment