2016-07-19 6 views
3

У меня есть ViewController, который я хочу представить, когда push-уведомление открывается из заблокированного экрана. Контроллер вид встроен в цепь контроллеров просмотреть, цепь:Swift Навигация к ViewController thats 3 windows deep

TabbedBarController (корень) -> NavigationController0 -> ViewController0 -> ViewController1 -> ViewControllerIWant

У меня есть две переменные из уведомлений I нажимной нужно передать в ViewControllerIWant

до сих пор у меня есть:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let rootVC = storyboard.instantiateViewControllerWithIdentifier("HomeVC") as! UITabBarController // HomeVC is the TabbedBarController 
let NaviVC = storyboard.instantiateViewControllerWithIdentifier("NavigationController0") as! UINavigationController // NavigationController0 is the Navigation Controller for this stack 

let ViewController0 = storyBoard.instantiateViewControllerWithIdentifier("ViewController0") as ViewController0 
let ViewController1 = storyBoard.instantiateViewControllerWithIdentifier("ViewController1") as ViewController1 
let ViewControllerIWant = storyBoard.instantiateViewControllerWithIdentifier("ViewControllerIWant") as ViewControllerIWant 

// Pass the Variables into ViewControllerIWant 
ViewControllerIWant.Variable0 = "This is the first Variable" 
ViewControllerIWant.Variable1 = "this is the second variable" 
// Load the VC 
self.presentViewController(ViewControllerIWant, animated:true, completion:nil) 

я могу загрузить ViewControllerIWant напрямую, а затем потерять навигации и вкладка CONTROLL поэтому, двигаясь назад, вы должны закрыть приложение и перезагрузить. Как я могу вставить VC, чтобы пользователь, просматривая это уведомление, загружал ViewControllerIWant?

+1

Настройка всех VCs с помощью 'present' и' push', в случае необходимости, передавая 'animated: false'. (Используйте 'true' для представления/нажатия' ViewControllerIWant'.) –

+0

просто установите свойство viewControllers на вашем контроллере навигации в свой массив из 3 vc's – CSmith

ответ

0

Вы можете оставить свой навигационный контроллер, используя перетекает вместо Вручая View Controller

После того, как переход создается из вашего стартового VC на нужный вам VC, вы даете ему идентификатор (например, «segueFromVC1ToVCIWant»).

Затем вызовите метод как действие Вашего уведомления:

self.performSegueWithIdentifier("segueFromVC1ToVCIWant", sender: nil) 

Наконец можно передать переменные, как это:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if(segue.identifier == "segueFromVC1ToVCIWant"){ 
      let viewControllerIWant = segue.destinationViewController as! ViewControllerIWant 
      ViewControllerIWant.variable0 = self.variable0 
      ViewControllerIWant.variable1 = self.variable1 
    } 
} 

Убедитесь, что вы создаете переменные с тем же именем в ViewControllerIWant в порядке для получения значений.

+0

Итак, AppDelegate не имеет метода для Segue –

1

Вы можете просто установить viewControllers навигационного контроллера. И показать текущий navigationController.

В вашем примере вы должны добавить это после того, как линия будет (у меня есть изменить все в нижнем регистре. Вы действительно не должны использовать заглавные буквы в качестве переменной)

viewControllerIWant.variable1 = "this is the second variable" 
naviVC.viewControllers = [viewController0, viewController1, viewControllerIWant] 
Смежные вопросы