#ios #swift #uinavigationcontroller
#iOS #быстрый #uinavigationcontroller
Вопрос:
У меня есть UIViewcontroller
, который представляет всплывающее окно с двумя кнопками «Отмена» и «Продолжить» соответственно.. но проблема в том, что когда я нажимаю кнопку продолжения, UINavigationController
это не переход к следующему UIViewcontroller
…
— onNextButtonTapped:
@IBAction func onOkayButtonClicked(_ sender: UIButton) {
self.dismiss(animated: true, completion: {
let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "nextVC") as! NextViewController
// let nextVCNav = UINavigationController(rootViewController: nextVC)
//self.navigationController?.pushViewController(nextVCNav, animated: true)
self.navigationController?.pushViewController(nextVC, animated: true)
})
}
Неужели что-то пропустил?
Комментарии:
1. вы получаете self == nil
2. @vijeesh, как ни странно, нет .. ничего не происходит..
3. но
4. пожалуйста, распечатайте self и посмотрите, равен он нулю или нет
5. @vijeesh из представленного контроллера вы не можете напрямую перейти к nextVC, потому что представленный контроллер не имеет навигации. Для этого вам необходимо представить навигационный контроллер.
Ответ №1:
Это похоже на проблему с цепочкой контроллеров. Насколько я понимаю, вы, должно быть, представили всплывающее окно модально, и, сделав это, вы вышли из UINavigationController
стека. Таким образом, отправка представления из контроллера popupview не является вариантом. Вы можете:
- Создайте протокол (или реализацию блока)
viewcontroller
, который информирует о появившемся всплывающем окне, что была нажата конкретная кнопка (что-то похожее на UIAlertController) - Создайте всплывающее окно в виде представления внутри контроллера представления и покажите и скройте его с помощью анимации. То есть вы можете добавить действие кнопки этого всплывающего окна в свой контроллер просмотра.
Ответ №2:
Я думаю, что UINavigationController отсутствует в иерархии.
Попробуйте это
let nav = UINavigationController(rootViewController: self)
UIApplication.shared.keyWindow?.rootViewController = nav
nav.pushViewController(nextVC, animated: true)