ios 如何获取 UINavigationController 的 rootViewController

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/41466729/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 11:00:46  来源:igfitidea点击:

How can I get the rootViewController of UINavigationController

iosswiftrootviewcontroller

提问by Remsay

I want to get the rootViewController of UINavigationController. It works in Objective-c, but when I use it in Swift , the error reminds me that it was wrong.

我想获取 UINavigationController 的 rootViewController。它在 Objective-c 中工作,但是当我在 Swift 中使用它时,错误提醒我它是错误的。

Code screenshot 1.

代码截图 1.

If I do this, add as! NSArray, it works, but also reminds me that "cast from '[UIViewController]' to unrelated type 'NSArray' always fails".

如果我这样做,添加as! NSArray,它可以工作,但也提醒我“从 '[UIViewController]' 转换为不相关的类型 'NSArray' 总是失败”。

Code screenshot 2

代码截图2

Can somebody show a better way to get the `rootViewController`` without error. Thank you.

有人可以展示一种更好的方法来无错误地获取 `rootViewController`。谢谢你。

回答by user6083088

You can get the root by,

你可以通过,

self.navigationController!.viewControllers.first

回答by Bogdan Farca

Or as an extension:

或者作为扩展:

extension UINavigationController {
    var rootViewController : UIViewController? {
        return viewControllers.first
    }
}

And then you use it like this:

然后你像这样使用它:

if let rootv = navigationController?.rootViewController { }

回答by moonvader

Or maybe this can be used

或者这可以使用

self.navigationController.visibleViewController

or

或者

self.navigationController.topViewController

回答by Sameh Salama

replace

代替

let homevci = controllerArray.objectAtIndex(0) as? NBHomeVC

with

let homevci = controllerArray.first as? NBHomeVC

or

或者

let homevci = controllerArray[0] as? NBHomeVC