#ios #swift #uiviewcontroller #uinavigationcontroller #uitabbar
Вопрос:
У меня есть SignInVc в качестве отправной точки и кнопка «Пропустить». Если пользователь нажимает «Пропустить», e переходит на домашнюю страницу, и когда он нажимает любую кнопку, его толкают на вход в систему.
В HomeVC есть панель вкладок, как и в одной из 4-х панелей вкладок Vc.
if let viewControllers = self.navigationController?.viewControllers {
for controller in viewControllers
{
if controller == (tabBarController?.viewControllers![0]){
print("FOUND IT")
}
print(controller)
}
}
Во время отладки с точками останова я могу видеть домашнюю страницу в NavigationController?.Контроллеры просмотра
Но я не могу получить к нему доступ!!, печать не выполняется. Что я должен использовать в RHS == ?
План состоит в том, чтобы перейти на домашнюю страницу вместо кода печати.
Редактировать:
Я добавляю скриншоты отладки ниже
Здесь я хочу добраться до контроллера вида по индексу 2
[
Комментарии:
1. Пожалуйста, добавьте экран с вашей иерархией в раскадровку или код, где вы выделяете TabBarController, навигационный контроллер и HomeViewController
Ответ №1:
Я не думаю, что у вас есть такая иерархия, как вы описали. Действительно, у тебя есть
NavigationController -> TabBarController -> HomeViewController or
TabBarController -> NavigationController -> HomeViewController
Свойства .navigationController
и .tabBarController
найдите ближайший доступный контроллер навигации и панели вкладок.
Просто изучите свою иерархию в раскадровке или в коде, и вы решите свою проблему.
UPD.
Основываясь на вашем экране, вы должны сначала найти контроллер панели вкладок и найти HomeViewController в TabBarController. Я думаю, что код должен выглядеть так:
if let tabBar = navController.viewControllers.first(where: { $0 is UITabBarController} ){
let homeController = tabController.viewControllers?.first(where: { $0 is HomeViewController})
print("Home controller: (home)")
}
Комментарии:
1. Его в «NavigationController -> TabBarController ->> HomeViewController»
2. Я обновил свой ответ, который вы должны найти в массиве ViewControllers панели вкладок, а не в массиве ViewControllers navBarController.
3. я там получаю ноль,
Ответ №2:
Я не уверен, прав ли я,
логически объявите глобальную переменную,
var initiateHomePage: Bool?
// объявить выше или вне любого файла swift
Для действий с кнопками
случай 1
@IBAction func skipButtonTapped(_ sender: Any) {
initiateHomePage = true // should go homepage
}
случай 2
@IBAction func anyButtonTapped(_ sender: Any) {
initiateHomePage = false // should go SignInVC
}
Наконец
во время выполнения
if initiateHomePage == true {
// redirect to home page
// use this to redirect to tab bar
if let viewControllers = self.navigationController?.viewControllers {
for controller in viewControllers
{
if controller == (tabBarController?.viewControllers![0]){
print("FOUND IT")
}
print(controller)
}
}
// or use this
let ViewController:UIStoryboard = UIStoryboard(name: "Module", bundle: nil)
let tabBarController = ViewController.instantiateViewController(withIdentifier: "tabBar") as! UITabBarController
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = tabBarController
} else {
// redirect to SignINVC
}