第一种模式--->符合 UITabBarController ---> UINavigationController布局
//MARK: 获取当前页面的最顶层控制器 <此方法在ios13 later 会出问题,废弃>
func getCurrentVCBS() -> UIViewController {
let keywindow = (UIApplication.shared.delegate as! AppDelegate).window//UIApplication.shared.keyWindow使用此有时会崩溃
let firstView: UIView = (keywindow?.subviews.first)!
let secondView: UIView = firstView.subviews.first!
var vc = viewForController(view: secondView)!
vc = ((vc as! UITabBarController).selectedViewController! as! UINavigationController).visibleViewController!
return vc
}
private func viewForController(view:UIView)->UIViewController?{
var next:UIView? = view
repeat{
if let nextResponder = next?.next, nextResponder is UIViewController {
return (nextResponder as! UIViewController)
}
next = next?.superview
}while next != nil
return nil
}
//MARK: 校验结果的正确性
//classType: 当前页面类类型
func vcResult(classType: UIViewController.Type) -> Bool {
return getCurrentVCBS().isKind(of: classType)
}
第二种模式--->所有
///获取当前显示的控制器 UIWindow (Visible)
func getCurrentVCBS2() -> UIViewController {
let keywindow = (UIApplication.shared.delegate as! AppDelegate).window?.rootViewController//UIApplication.shared.keyWindow
let rootVC = keywindow!//UIApplication.shared.keyWindow!.rootViewController!
return getVisibleViewControllerFrom(vc: rootVC)
}
//方法1
func getVisibleViewControllerFrom(vc: UIViewController) -> UIViewController {
if vc.isKind(of: UINavigationController.self) {
return getVisibleViewControllerFrom(vc: (vc as! UINavigationController).visibleViewController!)
} else if vc.isKind(of: UITabBarController.self) {
return getVisibleViewControllerFrom(vc: (vc as! UITabBarController).selectedViewController!)
} else {
if (vc.presentedViewController != nil) {
return getVisibleViewControllerFrom(vc: vc.presentedViewController!)
} else {
return vc
}
}
}
//方法2
func topViewControllerWithRootViewController(rootVC: UIViewController) -> UIViewController {
if rootVC.isKind(of: UITabBarController.self) {
let tabVC = rootVC as! UITabBarController
return topViewControllerWithRootViewController(rootVC: tabVC.selectedViewController!)
} else if rootVC.isKind(of: UINavigationController.self) {
let navc = rootVC as! UINavigationController
return topViewControllerWithRootViewController(rootVC: navc.visibleViewController!)
} else if (rootVC.presentedViewController != nil) {
return topViewControllerWithRootViewController(rootVC: rootVC.presentedViewController!)
} else {
return rootVC
}
}
///验证
func vcResult2(classType: UIViewController.Type) -> Bool {
return getCurrentVCBS2().isKind(of: classType)
}