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.