Вывод или увольнение ViewController - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть контроллер представления с обратной связью, доступ к которому осуществляется в 7 местах на 4 разных экранах.

Один из способов представить его в navigationController через pushViewController.Другие 6 раз он представлен модально.

Вот функция, которая открывает VC обратной связи

struct Constants{
    static func openFeedback(openFrom: UIViewController, nav:Bool) {
        let fbStoryboard = UIStoryboard(name: "FeedbackViewController", bundle: nil)
        let fbVC = fbStoryboard.instantiateViewController(withIdentifier: "FBSBID")
        fbVC.modalPresentationStyle = .overFullScreen
        fbVC.modalTransitionStyle = .crossDissolve
        if nav {
            openFrom.navigationController?.pushViewController(fbVC, animated: true)
        } else {
            openFrom.present(fbVC, animated: true, completion: nil)
        }
    }
}

VC обратной связи вызывается с Constants.openFeedback(openFrom: self, nav: true) или Constants.openFeedback(openFrom: self, nav: false)

Открытие ВК работает просто отлично!

Вот моя кнопка закрытия на контроллере представления обратной связи:

@IBAction func closeButtonPressed(_ sender: UIButton) {
    self.dismiss(animated: true, completion: nil)
}

, которая работает 6 из 7 раз, когда нетв стеке навигации.Когда он находится в стеке навигации, кнопка закрытия ничего не делает.

Мой вопрос: как мне закрыть контроллер обратной связи, основываясь на том, находится ли он в стеке navigationController или нет?

1 Ответ

0 голосов
/ 16 февраля 2019

Вы можете просто проверить, встроен ли контроллер вида в UINavigationController, проверив, равен ли navigationController контроллера nil или нет.

Так что, если он встроен, вы можете использовать popViewController(animated:) на контроллере навигации, чтобы "отклонить" нажатый контроллер

if let navCon = navigationController {
    navCon.popViewController(animated: true)
} else {
    dismiss(animated: true)
}
...