我试图获取不在AppDelegate中的当前显示UIViewController
,但它似乎总是得到最初的UIViewController
,而不是现在的。{/ p >
AppDelegate中的以下代码可以获得当前的UIViewController
,但是当我在任何一个View Controllers中使用它时,同样的功能都不起作用:
func getTopViewController() -> UIViewController
{
var topViewController = UIApplication.sharedApplication().delegate!.window!!.rootViewController!
while (topViewController.presentedViewController != nil) {
topViewController = topViewController.presentedViewController!
}
return topViewController
}
上述代码在类似问题中作为答案提供: Get the current displaying UIViewController on the screen in AppDelegate.m
无论我有多么深刻,我都只能检索出最前面的View Controller。
如何获得当前呈现的UIViewController
?
仅供参考:我使用UINavigationController
不,只使用常规UIViewController
课程。
答案 0 :(得分:18)
我不喜欢使用它,但有时候这是必要的。
std::string
**编辑:
这是一个改进版本,它将始终获得最顶级的视图控制器
const char*
答案 1 :(得分:1)
以下是一个函数中的相同想法:
func topController(_ parent:UIViewController? = nil) -> UIViewController {
if let vc = parent {
if let tab = vc as? UITabBarController, let selected = tab.selectedViewController {
return topController(selected)
} else if let nav = vc as? UINavigationController, let top = nav.topViewController {
return topController(top)
} else if let presented = vc.presentedViewController {
return topController(presented)
} else {
return vc
}
} else {
return topController(UIApplication.shared.keyWindow!.rootViewController!)
}
}
在Swift 4项目中为我工作