我正在使用这一行:
var rootViewController = self.window!.rootViewController as? UINavigationController
但是,这只返回根而不是顶级导航控制器。我试图在顶部推送视图,但如果根控制器不是顶级,则视图不在顶部。
我试图找出当前视图控制器的导航控制器。
这就是为了解决我的错误问题:
Warning: Attempt to present <UINavigationController: 0x7f8473d7c800> on <UINavigationController: 0x7f8472022600> whose view is not in the window hierarchy!
有什么建议吗?
答案 0 :(得分:0)
你快到了:
func topViewController() -> UIViewController? { if let rootViewController = self.window?.rootViewController as? UINavigationController { return rootViewController.topViewController } return nil }
请注意,因为在topViewController之上可能还有另一个ViewController模态显示。您可能还想查看topViewController.presentedViewController
:
func topViewController() -> UIViewController? { if let rootViewController = self.window?.rootViewController as? UINavigationController { if let topVC = rootViewController.topViewController { if let modalTopVC = topVC.presentedViewController { return modalTopVC } return topVC } return rootViewController } return nil }