2017-01-04 4 views
6

Я хочу получить rootViewController от UINavigationController, он работает в Objective-c, но когда я использую его в Swift, ошибка напоминает мне, что это было неправильно enter image description here.Как я могу получить rootViewController UINavigationController в Swift

Если я это сделаю, добавьте «as! NSArray», он работает, но также напоминает мне, что «отличное от« [UIViewController] »к несвязаному типу« NSArray »всегда терпит неудачу». enter image description here

Может ли кто-нибудь показать лучший способ получить rootViewController без ошибок или напоминает? Спасибо.

+0

это 'let homevci = navigationController! .viewControllers!. first as! NBHomeVC' –

+0

, но лучше, вам нужно прочитать небольшую документацию. это не objc-c :) –

+0

http://stackoverflow.com/questions/26667009/get-top-most-uiviewcontroller – Scriptable

ответ

10

Вы можете получить корень путем,

self.navigationController!.viewControllers.first 
0

заменить

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

с

let homevci = controllerArray.first as? NBHomeVC 

или

let homevci = controllerArray[0] as? NBHomeVC 
9

Или как расширение:

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

И затем использовать его как это:

if let rootv = navigationController?.rootViewController { } 
+0

Хороший ответ, но 'как? UIViewController' можно удалить, поскольку 'first' уже возвращает' UIViewController? '. Кроме того, во втором фрагменте кода это должен быть 'navigationController ?.rootViewController', поскольку он является необязательным. – nyg

+0

@nyg: Спасибо, что заметили его, я уверен, что он работал в какой-то момент в прошлом, но слишком много версий Swift пришло и ушло ... Теперь он должен работать в Swift 4. –

0

Или, возможно, это может быть использовано

self.navigationController.visibleViewController 

или

self.navigationController.topViewController 
Смежные вопросы