2015-11-29 2 views
1

Я пытаюсь выполнить segue после получения уведомления.Выполнение Segue из AppDelegate.swift

Вот что у меня есть в моем делете приложения.

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 


      let viewController = self.window!.rootViewController!.storyboard!.instantiateViewControllerWithIdentifier("SecondViewController") 
      self.window?.rootViewController = viewController 


    } 

Это берет меня непосредственно к виду, я хотел бы, чтобы идти, однако Navbar и панель вкладок скрыты. Из делегата приложения, как мне выполнить segue из одного представления в другое? Чтобы я мог дойти до второго взгляда, как будто я оттолкнулся от своего первого?

ответ

2

ли вы попробовать с:

viewController.performSegueWithIdentifier("my_segue_identifier", sender: nil) 

Кроме того, более надежный способ транслировать NSNotification от вашего AppDelegate и ваш ViewController слушать для конкретного уведомления.

+0

Я удалил self.window? и добавил то, что вы предложили, с моим идентификатором segue, а segue не выполняется. –

+0

Как я буду транслировать NSNotification? Есть ли хорошее руководство по этому вопросу? –

+1

Вот один пример: https://www.hackingwithswift.com/example-code/system/how-to-post-messages-using-nsnotificationcenter – Armin

0

Мое решение: добавить открытую переменную в AppDelegate (и т.д. флаг = 1)

@available(iOS 10.0, *) 
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 
    print("User Info = ",response.notification.request.content.userInfo) 
    flag = 1; <--- 
    completionHandler() 
} 

и проверить флаг на rootviewcontroller-> ViewDidLoad. если это правда? позвоните в ваш spesific segue

override func viewDidLoad() { 
    super.viewDidLoad() 
    if (flag == 1) { 
     self.performSegue(withIdentifier: "roottanBildirimSegue", sender: self) 
    }