Ios 如何获取UINavigationController的rootViewController
我想获取UINavigationController的rootViewController。它在Objective-c中工作,但当我在Swift中使用它时,错误提醒我它是错误的 如果我这样做,添加Ios 如何获取UINavigationController的rootViewController,ios,swift,rootviewcontroller,Ios,Swift,Rootviewcontroller,我想获取UINavigationController的rootViewController。它在Objective-c中工作,但当我在Swift中使用它时,错误提醒我它是错误的 如果我这样做,添加as!NSArray,它可以工作,但也提醒我“从“[UIViewController]”转换到不相关类型“NSArray”总是失败的” 有没有人能提供一种更好的方法来无误地获取“rootViewController”。谢谢。你可以通过 self.navigationController!.viewC
as!NSArray
,它可以工作,但也提醒我“从“[UIViewController]”转换到不相关类型“NSArray”总是失败的”
有没有人能提供一种更好的方法来无误地获取“rootViewController”。谢谢。你可以通过
self.navigationController!.viewControllers.first
替换
let homevci = controllerArray.objectAtIndex(0) as? NBHomeVC
与
或
或作为扩展:
extension UINavigationController {
var rootViewController : UIViewController? {
return viewControllers.first
}
}
然后你像这样使用它:
if let rootv = navigationController?.rootViewController { }
或者可以用这个
self.navigationController.visibleViewController
或
这是
让homevci=navigationController!。视图控制器!。第一个!NBHomeVC
但更好的方法是,您需要阅读一些swift文档。它不是objc-c:)它是有效的,谢谢,我想我应该考虑一下[UIViewController]和数组之间的区别。回答不错,但是as?UIViewController
可以删除,因为first
已返回UIViewController?
。另外,在您的第二个代码段中,它应该是navigationController?.rootViewController
,因为它是可选的。@nyg:感谢您发现它,我相信它在过去的某个时候起了作用,但是有太多的Swift版本来了又去了。。。它现在应该可以在Swift 4中工作。这不是根视图控制器,这是导航控制器堆栈中的顶视图控制器,topViewController
将是根视图控制器,如果导航控制器没有推送任何视图控制器。
if let rootv = navigationController?.rootViewController { }
self.navigationController.visibleViewController
self.navigationController.topViewController