2016-05-04 2 views
0

Вот что я пытаюсь сделать. Когда я получаю push-уведомление, и я нажимаю, я хочу показать конкретный экран в своем приложении. Я нашел много об этом, но у меня возникли проблемы из-за сложности структуры моего приложения. Вот как структурировано приложение:Push Notification открыть определенный экран в TabBarController NavigationController opensViewController

Я хочу передать некоторые аргументы DetailViewContorller, поэтому я могу убедиться, что получаю правильные результаты при открытии экрана. Вот скриншот моей структуры приложения application Folow

С помощью следующего кода в моем AppDelegate:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let tb = storyboard.instantiateViewControllerWithIdentifier("TabBarVC") as! UITabBarController 
tb.selectedIndex = 1 
window?.rootViewController? = tb 

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

  1. revealViewController равна нулю, так что я не в состоянии открыть свою панель настройки
  2. Я до сих пор не добраться до DetailViewController, который находится в нижней части моей точки зрения иерархии

Подсказка будет оценена по достоинству.

ответ

0

@MK_Dev, Спасибо за ваше предложение, но я искал что-то более легкое в управлении.

Это действительно помогло мне. Get top most UIViewController

Вот что я сделал:

if var topControl = UIApplication.sharedApplication().keyWindow?.rootViewController { 
      while let presentedContreller = topControl.presentedViewController{ 
       topControl = presentedContreller 
      } 
      if topControl.childViewControllers[0].isKindOfClass(MyCustomClassVC) { 
      // Check if the user is already on the VC we are trying to open 
       let chatController = topControl.childViewControllers[0] as! MyCustomClassVC 
// ... any additional code you need to add here ... 
    } 
} 
0

У меня была подобная проблема, хотя мой поток был немного иным. Я закончил обработку события Push Notification (когда пользователь набрал его) и сохранил объект на уровне делегата приложения. В каждом представлении контроллера, появившемся после этого (в методе ViewDidLoad()), я должен проверить этот объект и выяснить, следует ли перенаправить поток на следующий контроллер представления. Чтобы помочь в этом, у моих уведомлений был тип, связанный с ними. К сожалению, я не смог найти лучшего решения.

P.S. Это также похоже на то, что вы создаете View Controllers в коде, и я использовал раскадровки. Однако основная идея такая же. Я закончил