Pan*_*ngu 6 uiviewcontroller ios swift swift3
我正在尝试获取当前UIViewController不在AppDelegate中的显示,但它似乎总是得到最初的顶部UIViewController,而不是现在的顶部.
AppDelegate中的以下代码获取当前UIViewController存在的代码,但是当我在任何一个View控制器中使用它时,同样的功能不起作用:
func getTopViewController() -> UIViewController
{
var topViewController = UIApplication.sharedApplication().delegate!.window!!.rootViewController!
while (topViewController.presentedViewController != nil) {
topViewController = topViewController.presentedViewController!
}
return topViewController
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是作为类似问题的答案提供的: 在AppDelegate.m的屏幕上获取当前显示的UIViewController
无论我有多么深刻,我都只能检索出最前面的View Controller.
我怎样才能获得当前的演示UIViewController?
仅供参考:我不是在使用UINavigationController常规UIViewController课程.
Mar*_*vic 18
我不喜欢使用它,但有时它是必要的.
static func getTopViewController() -> UIViewController {
var viewController = UIViewController()
if let vc = UIApplication.shared.delegate?.window??.rootViewController {
viewController = vc
var presented = vc
while let top = presented.presentedViewController {
presented = top
viewController = top
}
}
return viewController
}
Run Code Online (Sandbox Code Playgroud)
**编辑:
这是一个改进版本,它将始终获得最顶级的视图控制器
static var top: UIViewController? {
get {
return topViewController()
}
}
static var root: UIViewController? {
get {
return UIApplication.shared.delegate?.window??.rootViewController
}
}
static func topViewController(from viewController: UIViewController? = UIViewController.root) -> UIViewController? {
if let tabBarViewController = viewController as? UITabBarController {
return topViewController(from: tabBarViewController.selectedViewController)
} else if let navigationController = viewController as? UINavigationController {
return topViewController(from: navigationController.visibleViewController)
} else if let presentedViewController = viewController?.presentedViewController {
return topViewController(from: presentedViewController)
} else {
return viewController
}
}
Run Code Online (Sandbox Code Playgroud)