func getLastVisibleController(ofParent parent: UIViewController? = nil) -> UIViewController? { if let vc = parent { if let tab = vc as? UITabBarController, let selected = tab.selectedViewController { return getLastVisibleController(ofParent: selected) } else if let nav = vc as? UINavigationController, let top = nav.topViewController { return getLastVisibleController(ofParent: top) } else if let presented = vc.presentedViewController { return getLastVisibleController(ofParent: presented) } else { return vc } } else { if let rootVC = UIApplication.shared.keyWindow?.rootViewController { return getLastVisibleController(ofParent: rootVC) } else { return nil } } }