2016-12-26 10 views
-1

Я использую push-уведомления в своем приложении. Поэтому, когда я получаю уведомление и касаюсь его, я хочу перейти к другому UITabbarcontroller, но когда я это делаю, приложение показывает только UINavigationbar и не UITabbarcontroller. Этот скриншот ->Как открыть конкретный uitabbarcontroller из AppDelegate с push-уведомлениями?

enter image description here

И это мой код.

  let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "RequestDriverViewController") as! RequestDriverViewController 

     let nc = UINavigationController(rootViewController: vc) 

     self.window = UIWindow(frame: UIScreen.main.bounds) 
     self.window?.rootViewController = nc 
     self.window?.makeKeyAndVisible() 
+0

Пожалуйста, прочитайте раздел «Реагирование на уведомления и события» в документации: https://developer.apple.com/reference/uikit/uiapplicationdelegate – matt

+0

Вам необходимо предоставить подробные сведения о вашей иерархии контроллера навигационного контроллера/панели вкладок. Обычно есть контроллер панели вкладок sibfly, который, в свою очередь, содержит несколько навигационных контроллеров, поэтому обычным подходом является переход на желаемую вкладку, возможно, появление нежелательных контроллеров на этом пути, но ваша конкретная ситуация может быть совсем иной ... – jcaron

+0

@ jcaron Спасибо за ваши комментарии, действительно были полезны, у меня много работы, и поэтому я не мог видеть, что я должен сначала получить идентификатор UItabbarcontroller до UIViewcontroller. Итак, это код, который я использовал для решения моего вопроса: let vc = UIStoryboard (имя: «Main», bundle: nil) .instantiateViewController (withIdentifier: «TabBarIdentifier») как! UITabBarController self.window = UIWindow? (Кадр: UIScreen.main.bounds) self.window .rootViewController = VC self.window .makeKeyAndVisible() Большое спасибо –

ответ

-1

Я был в состоянии решить:

let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TabBarIdentifier") as! UITabBarController 

     self.window = UIWindow(frame: UIScreen.main.bounds) 
     self.window?.rootViewController = vc 
     self.window?.makeKeyAndVisible() 
+0

Если контроллер панели вкладок уже существует, вам, скорее всего, не следует создавать его снова, вы должны просто восстановить его и внести в него любые необходимые изменения (например, изменить текущую активную вкладку) – jcaron

+0

@jcaron Затем, если приложение находится в задний план? ... Как я его получаю? Для этого я считаю, что необходимо создать экземпляр, но я могу сделать «If», который проверяет, есть ли приложение в фоновом режиме или нет. Если да, то создайте экземпляр, если нет, затем извлеките его. Однако, как я могу получить этот UItabBarController? –

+0

Используйте «rootViewController» для Windows. Убедитесь, что это не nil и что это экземпляр 'UITabBarController', а затем использовать его. – jcaron