1.主要代码
import UIKit
extension UIViewController{
static func findBestViewController(vc:UIViewController) -> UIViewController {
if vc.presentedViewController != nil {
return self.findBestViewController(vc: vc.presentedViewController!)
}
else if vc.isKind(of: UISplitViewController.self) {
let svc = vc as! UISplitViewController
if svc.viewControllers.count > 0 {
return self.findBestViewController(vc: svc.viewControllers.last!)
}
else {
return vc
}
}
else if vc.isKind(of: UINavigationController.self) {
let svc = vc as! UINavigationController
if svc.viewControllers.count > 0 {
return self.findBestViewController(vc: svc.topViewController!)
}
else {
return vc
}
}
else if vc.isKind(of: UITabBarController.self) {
let svc = vc as! UITabBarController
if svc.viewControllers != nil {
if svc.viewControllers!.count > 0 {
if svc.selectedViewController != nil {
return self.findBestViewController(vc: svc.selectedViewController!)
}
else {
return vc
}
}
else {
return vc
}
}
else {
return vc
}
}
else {
return vc
}
}
static func currentViewController() -> UIViewController {
let rootViewController = kWindow.rootViewController
if rootViewController != nil {
return self.findBestViewController(vc: rootViewController!)
}
else {
return UIViewController()
}
}
}
2.使用
let vc = UIViewController.currentViewController()
print("VideoPlayerController == \(vc)")
//打印结果
//VideoPlayerController == <TestSwift_2.VideoPlayerController: 0x13710a610>
let vc = UIViewController.currentViewController()
print("TestFristController == \(vc)")
//打印结果
//TestFristController == <TestSwift_2.TestFristController: 0x104b0bea0>