Swift ios отправляет пользователя определенному ViewController в приложении на основе вкладок

Я хочу отправить пользователя определенному ViewController в моем приложении после нажатия на уведомление.

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

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

Но мое приложение имеет панель вкладок и выглядит так

Панель вкладок

tab1: navigationController -> VC1

tab2: navigationController -> VC2 -> HomeVC

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

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

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

tab2: navigationController -> VC2 -> HomeVC

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

3 ответа

Решение

Вы должны иметь доступ к вашему 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

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

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

Попробуйте что-то вроде этого:

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

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

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

Другие вопросы по тегам