Создание глубокого View Controller с панелью вкладок и навигацией - PullRequest
0 голосов
/ 08 октября 2019

Я использую Xcode 11 и Swift 5.

Получив уведомление APNS, мне нужно перейти к контроллеру представления глубоко в моей раскадровке из AppDelegate. Этот viewController (chatVC) находится за панелью вкладок, контроллером навигации и несколькими другими контроллерами представления. Смотрите изображение ниже. Я знаю, как проверить уведомление о тегах и как использовать launchOptions в AppDelegate для запуска перехода. Но я борюсь с тем, как установить контекст для этого последнего контроллера представления, чтобы пользователь мог использовать кнопку «Назад» вплоть до контроллера панели вкладок.

deep link

Я прочитал много SO-ответов и перепробовал много подходов, но ни один из них, похоже, не имеет такого же встраивания контроллера nav в контроллер панели вкладок. Вот мой код в AppDelegate (после прочтения тега в уведомлении):

        if tag == "CS" {
            // Set up a Chat View Controller.
            if let chatVC = UIStoryboard(name: "Main", bundle: .main).instantiateViewController(withIdentifier: Constants.Storyboard.chatVC) as? NewChatViewController,
                let tabBarVC = UIStoryboard(name: "Main", bundle: .main).instantiateViewController(withIdentifier: Constants.Storyboard.tabBarController) as? UITabBarController,
                let csVC = UIStoryboard(name: "Main", bundle: .main).instantiateViewController(withIdentifier: Constants.Storyboard.csViewController) as? CustomerServiceViewController,
                let helpVC = UIStoryboard(name:"Main", bundle: .main).instantiateViewController(withIdentifier: Constants.Storyboard.helpVC) as? HelpViewController
            {
                // Set the customer service document Id.
                chatVC.cs = cs
                // Make the tabBarVC the Root View Controller
                self.window?.rootViewController = tabBarVC
                self.window?.makeKeyAndVisible()
                // Select the Favorites Index.
                tabBarVC.selectedIndex = 0
                // Push the Customer Service VC on top.
                tabBarVC.show(csVC, sender: Any?.self)
                // Push the Help VC on top of Customer Service VC.
                csVC.show(helpVC, sender: Any?.self)
                // Push the the chat detail page on top.
                helpVC.show(chatVC, sender: Any?.self)
            }
        }
    }
    return true

Что я могу сделать, чтобы перейти к chatVC и настроить под ним контекст навигации, чтобы можно было использовать кнопку «Назад»?

1 Ответ

1 голос
/ 08 октября 2019

Вот как вы можете это сделать:

guard let tabBarVC = UIApplication.shared.windows.filter( {$0.rootViewController is UITabBarController } ).first?.rootViewController as? UITabBarController else { return }
tabBarVC.selectedIndex = 0 //you can select another tab if needed
guard let chatVC = UIStoryboard(name: "Main", bundle: .main).instantiateViewController(withIdentifier: Constants.Storyboard.chatVC) as? NewChatViewController else { return }
if let navController = tabBarVC.viewControllers?[0] as? UINavigationController {
   navController.pushViewController(chatVC, animated: true)
}

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

Надеюсь, это работает для вас!

...