如果我推送视图控制器和/或在UINavigationController
上呈现模式视图控制器,我如何找出最顶层的UIViewController
是什么?或者在我的例子中,我想知道某个UITableViewController
是否是最靠前的。
我尝试使用:
self.navigationController.topViewController == self
..。但这不管用。我猜它之所以失败,是因为我在它上面呈现了模态视图控制器,并且topViewController
只跟踪在UINavigationController
上推送了哪些视图(而不是那些以模态呈现的视图)。
发布于 2010-11-01 21:09:09
NSArray *viewContrlls=[[self navigationController] viewControllers];
[viewContrlls lastObject];
发布于 2017-12-13 23:55:23
我知道这个问题很老了,但它仍然很流行--这就是为什么我想发布我处理不同UIViewController's
子类的最佳解决方案的原因。同时,您可以通过自定义的“集合”控件来扩展此方法的功能,例如侧边菜单。
extension UIWindow {
var visibleViewController: UIViewController? {
guard let rootViewController = rootViewController else {
return nil
}
return visibleViewController(for: rootViewController)
}
private func visibleViewController(for controller: UIViewController) -> UIViewController {
var nextOnStackViewController: UIViewController? = nil
if let presented = controller.presentedViewController {
nextOnStackViewController = presented
} else if let navigationController = controller as? UINavigationController,
let visible = navigationController.visibleViewController {
nextOnStackViewController = visible
} else if let tabBarController = controller as? UITabBarController,
let visible = (tabBarController.selectedViewController ??
tabBarController.presentedViewController) {
nextOnStackViewController = visible
}
if let nextOnStackViewController = nextOnStackViewController {
return visibleViewController(for: nextOnStackViewController)
} else {
return controller
}
}
}
https://stackoverflow.com/questions/4067692
复制相似问题