нажатие на nextViewcontroller из всплывающего окна не работает

#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. но print сообщения работают …

4. пожалуйста, распечатайте self и посмотрите, равен он нулю или нет

5. @vijeesh из представленного контроллера вы не можете напрямую перейти к nextVC, потому что представленный контроллер не имеет навигации. Для этого вам необходимо представить навигационный контроллер.

Ответ №1:

Это похоже на проблему с цепочкой контроллеров. Насколько я понимаю, вы, должно быть, представили всплывающее окно модально, и, сделав это, вы вышли из UINavigationController стека. Таким образом, отправка представления из контроллера popupview не является вариантом. Вы можете:

  1. Создайте протокол (или реализацию блока) viewcontroller , который информирует о появившемся всплывающем окне, что была нажата конкретная кнопка (что-то похожее на UIAlertController)
  2. Создайте всплывающее окно в виде представления внутри контроллера представления и покажите и скройте его с помощью анимации. То есть вы можете добавить действие кнопки этого всплывающего окна в свой контроллер просмотра.

Ответ №2:

Я думаю, что UINavigationController отсутствует в иерархии.
Попробуйте это

 let nav = UINavigationController(rootViewController: self)
UIApplication.shared.keyWindow?.rootViewController = nav
nav.pushViewController(nextVC, animated: true)