2015-05-11 4 views
1

Я пытаюсь вызвать корневой контроллер, и я не знаю кода для вызова его. Я использую условное выражение и проверю, что такое предыдущий контроллер представления, и блок кода будет работать в зависимости от того, что это было. Вот мой код:Вызов предыдущего контроллера представления в Swift

SecondViewController

override func viewDidLoad () { 
    super.viewDidLoad () 

    let previousController = storyboard!.instantiateViewControllerWithIdentifier ("firstViewController") as? FirstViewController 

    //HELP IN LINE BELOW 
    //if root view controller == previousController { 
       //run some code 
    //} 
} 
+0

'instantiateViewControllerWithIdentifier' создаст каждый раз, когда новый контроллер представления. Чего вы пытаетесь достичь? – Moxy

+0

Возможный дубликат [Как вы делитесь данными между диспетчерами просмотра и другими объектами в Swift?] (Http://stackoverflow.com/questions/29734954/how-do-you-share-data-between-view-controllers-and -другие-объекты-в-Swift) – nhgrif

ответ

8
let stack = self.navigationController.viewControllers 
if (stack.count > 1) { 
    let previousController = stack[stack.count-2] 
} 

Или, если у вас нет навигации контроллера

let previousController = self.presentingViewController 

Кроме того, просто чтобы быть ясно, контроллер зрения корня будет первый контроллер вида в стеке, то есть:

self.navigationController.viewControllers.firstObject 

или

var previousController : UIViewController = self 
var rootController : UIViewController? 
do { 
    var rootViewController = previousController 
    var previousController = rootViewController.presentingViewController 
} while (previousController != nil) 
Смежные вопросы