Вы пытались отладить это, используя точки останова в XCode?Из того, что я вижу, первое, что вы делаете, это проверяете, является ли выбранный контроллер представления класса PopupViewController
.Вы уверены, что контроллер представления создается правильно?
И, кстати, я бы рекомендовал другой способ создания экземпляра контроллера представления из раскадровки, а не:
tabBarController.storyboard?.instantiateInitialViewController()
Первое, что нужно сделатьперейдите к самому файлу раскадровки, и в контроллере представления вы пытаетесь создать экземпляр Storyboard ID
, например, класс раскадровки (PopupViewController
в вашем случае).
Далее вы захотите создать экземпляр самой раскадровки, используя инициализатор init(name: String, bundle storyboardBundleOrNil: Bundle?)
:
let storyboard = UIStoryboard(name: "Popup", bundle: nil)
А теперь создайте экземпляр контроллера представления с помощью переменной storyboard
следующим образом:
let popupViewController = storyboard.instantiateViewController(withIdentifier: "PopupViewController") as! PopupViewController
Наконец, вы можете придать ему дополнительную конфигурацию и представить ее на контроллере панели вкладок:
popupViewController.modalPresentationStyle = .fullScreen
tabBarController.present(popupViewController, animated: true)
Редактировать
Дополнительно, чтобы сделать этобольше Swifty , я рекомендую guard
заявление для досрочного выхода.Наконец, метод может выглядеть примерно так:
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
guard viewController is PopupViewController else { return true }
let storyboard = UIStoryboard(name: "Popup", bundle: nil)
let popupViewController = storyboard.instantiateViewController(withIdentifier: "PopupViewController") as! PopupViewController
popupViewController.modalPresentationStyle = .fullScreen
tabBarController.present(popupViewController, animated: true, completion: nil)
return false
}