来自AppDelegate Swift的iOS顶级导航控制器

时间:2016-01-06 20:17:21

标签: ios iphone swift appdelegate

我正在使用这一行:

var rootViewController = self.window!.rootViewController as? UINavigationController  

但是,这只返回根而不是顶级导航控制器。我试图在顶部推送视图,但如果根控制器不是顶级,则视图不在顶部。

我试图找出当前视图控制器的导航控制器。

这就是为了解决我的错误问题:

Warning: Attempt to present <UINavigationController: 0x7f8473d7c800> on <UINavigationController: 0x7f8472022600> whose view is not in the window hierarchy!

有什么建议吗?

1 个答案:

答案 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
}