2016-11-09 11 views
0

Я хочу отправить пользователя в конкретный ViewController в мое приложение после нажатия на уведомление.Swift ios отправляет пользователя на конкретный ViewController в приложении на основе табуляции

я теперь, что я могу сделать что-то вроде этого:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let destinationViewController = storyboard.instantiateViewControllerWithIdentifier("Home") as? HomeViewController 
presentedVC?.presentViewController(destinationViewController!, animated: true, completion: nil) 

Но мое приложение имеет панель вкладок и выглядит следующим образом

Tab бар

tab1: navigationController -> VC1

tab2: navigationController -> VC2 -> HomeVC

вкладка: navigationController -> VC3

Каждая вкладка имеет навигационный контроллер в качестве ее переднего края.

Итак, как я могу отправить пользователя в HomeVC? Я должен сначала выбрать вкладку 2, то навигационный контроллер затем нажмите пользователя tvice:

tab2: navigationController -> VC2 -> HomeVC

И другая проблема, если есть какой-нибудь способ, чтобы сказать, является ли пользователь уже в HomeVC? Я не хочу отправлять пользователя в тот же VC, если он уже там.

ответ

1

У вас должен быть доступ к вашему UITabbarController у вас UIApplicationDelegate или везде, где вы обращаетесь с уведомлением.

let tabBar:UITabBarController = self.window?.rootViewController as! UITabBarController //or whatever your way of getting reference is 

Итак, сначала вы получите ссылку на UINavigationController в вашей второй вкладке, как это:

let navInTab:UINavigationController = tabBar.viewControllers?[1] as! UINavigationController 

Теперь нажмите домашний вид на навигационном контроллере второй вкладки:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let destinationViewController = storyboard.instantiateViewControllerWithIdentifier("Home") as? HomeViewController 
navInTab.pushViewController(destinationViewController!, animated: true) 

И наконец, переключите вкладку на вторую, чтобы показать только что нажал домашний контроллер

tabBar.selectedIndex = 1 

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

+0

Dont Мне также нужен pushViewController() Поскольку HomeVC находится на двух уровнях от навигационного контроллера ?: ** tab2: navigationController -> VC2 -> HomeVC ** – user2636197

+0

О, я пропустил это. Да, вам действительно нужно нажать контроллер просмотра вместо 'presentViewController()' Я отредактировал свой ответ. –

+0

Но нужно ли мне дважды нажать его с двух уровней? – user2636197

0

попробовать что-то вроде этого:

if let tabBarController = window?.rootViewController as? UITabBarController { 
    tabBarController.selectedIndex = 1 // in your case the second tab 
} 

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

Указанный код работает в AppDelegate/вы можете легко вызвать его в любом месте, получив экземпляр tabBarController.

0

Вы можете проверить, какая вкладка выбрана пользователем по методу var selectedIndex: Int. Вы можете проверить, есть ли у view controllerself.navigationController?.presentingViewController?.presentedViewController. Это решит вашу проблему.

+0

Я не понял: '' self.navigationController? .ПредставляяViewController? .PresentedViewController'' вы можете дать мне пример того, как я использую что для проверки того, что я уже на HomeVC – user2636197

+0

ПредставленныйViewController является свойством UIViewController: Контроллер представления, который представлен этим контроллером представления или одним из его предков в иерархии диспетчера представлений. –

 Смежные вопросы

  • Нет связанных вопросов^_^