У меня есть основной tabBarController
, и я хотел бы представить viewController
modally
, когда нажата определенная tabBarItem
.
Я загружаю viewControllers
в мой tabBarController
как ...
func setupViewControllers() {
self.tabBar.isHidden = false
if let firstVC = storyboard?.instantiateViewController(withIdentifier: "first") as? FirstViewController, let secondVC = storyboard?.instantiateViewController(withIdentifier: "second") as? SecondViewController, let thirdVC = storyboard?.instantiateViewController(withIdentifier: "third") as? ThirdViewController, let fourthVC = storyboard?.instantiateViewController(withIdentifier: "fourth") as? FourthViewController, let fifthVC = storyboard?.instantiateViewController(withIdentifier: "fifth") as? FifthViewController {
let firstNavController = UINavigationController(rootViewController: firstVC)
let secondNavController = UINavigationController(rootViewController: secondVC)
let fourthNavController = UINavigationController(rootViewController: fourthVC)
let fifthNavController = UINavigationController(rootViewController: fifthVC)
firstNavController.tabBarItem.image = image
secondNavController.tabBarItem.image = image
fourthNavController.tabBarItem.image = image
fifthNavController.tabBarItem.image = image
thirdVC.tabBarItem.image = image
tabBar.tintColor = nil
//Load tabBar viewControllers
viewControllers = [homeNavController, postNavController, plusMenuVC, meetupNavController, profileNavController]
}
}
Затем я согласовал tabBarViewController
с UITabBarControllerDelegate
, чтобы вызвать метод ...
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if tabBarController.selectedIndex == 2, let thirdVC = viewController as? ThirdViewController {
thirdVC.modalPresentationStyle = .overFullScreen
thirdVC.modalTransitionStyle = .crossDissolve
present(thirdVC, animated: true, completion: nil)
return false
} else { return true }
}
Однако вышеприведенное никогда не срабатывает. Я попытался установить в viewDidLoad
self.delegate = self
Я попытался настроить root навигационные контроллеры и его предка tabBarController
делегировать себя.
Казалось, что ничего не работает, и я надеюсь, что кто-то может помогите мне, так как я не смог отладить и найти существующее решение ...
ОБНОВЛЕНИЕ Итак, я создал dummyThirdVC
вместо thirdVC
в функции setupViewControllers()
, В dummyThirdVC
я соответствовал UITabBarControllerDelegate
, а в viewDidLoad
я установил self.tabBarController.delegate = self
. Затем я взял метод delegate
и ввел его в этот dummyThirdVC
, где внутри этого метода delegate
я создал реальный thirdVC
для представления.
Метод delegate
наконец-то срабатывает должным образом, но моя проблема в том, что dummyThirdVC
и его представление должны сначала загрузиться и появиться, чтобы delegate
был установлен и сработал после этого.
Как я могу не показать dummyThirdVC
и сразу же просто представить экземпляр, настоящий thirdVC
? Я пытался dummyThirdVC.viewDidLoad()
в моей setupViewControllers
функции безрезультатно ...