App wide operations
Get the top most UIViewController
Section titled “Get the top most UIViewController”A common approach to get the top most UIViewController is to get the RootViewController of your active UIWindow. I wrote an extension for this:
extension UIApplication {
func topViewController(_ base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController {
if let nav = base as? UINavigationController { return topViewController(nav.visibleViewController) }
if let tab = base as? UITabBarController { if let selected = tab.selectedViewController { return topViewController(selected) } }
if let presented = base?.presentedViewController { return topViewController(presented) }
return base!}Intercept System Events
Section titled “Intercept System Events”Using the NotificationCenter of iOS, which can be very powerful, you are able to intercept certain app-wide events:
NotificationCenter.default.addObserver( self, selector: #selector(ViewController.do(_:)), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil)You can register for a lot of more events, just take a look at https://developer.apple.com/reference/foundation/nsnotification.name.