Быстрая кнопка отмены для разных контроллеров - PullRequest
0 голосов
/ 27 ноября 2018

Я пишу простое приложение с помощью swift, и я застрял в следующей точке, у меня есть два контроллера, которые ведут к другому, и когда я нажимаю на кнопку отмены, это всегда приводит к корневому контроллеру, нетнезависимо от того, откуда я прихожу.

У меня есть первый контроллер (UIViewController), который идет к контроллеру навигации моего целевого контроллера (тот, от которого я хотел бы вернуться к нужному вызывающему контроллеру).

У меня есть второй контроллер (UITableViewController), который идет непосредственно к моему целевому контроллеру.

Вот код моей кнопки Отмена:

// MARK: - Navigation
    @IBAction func lendingCancelButton(_ sender: UIBarButtonItem) {
        // Depending on style of presentation (modal or push presentation), this view controller needs to be dismissed in two different ways
        let isPresentingInAddLendingMode = presentingViewController is UINavigationController
        if isPresentingInAddLendingMode {
            dismiss(animated: true, completion: nil)
        } else if let owningNavigationController = navigationController {
            owningNavigationController.popViewController(animated: true)
        } else {
            fatalError("the LendingViewController is not inside a navigation controller.")
        }
    }

ЕслиЯ правильно понял (вы можете исправить меня, если я ошибаюсь, я бы кое-что узнал), он проверяет, является ли ViewController, который представляет мою цель ViewController, NavigationController.

Так что, может быть, в качестве второго контроллера (my UITableViewController) не проходит через NavigationController, поэтому последним, вызывающим мое целевое представление с NavigationController, всегда является UIViewController.

Не сомневайтесьТейт, чтобы сказать мне, если это не достаточно ясно (слишком много раз слово «Контроллер» в моем сообщении) или если вам нужен дополнительный код.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Хорошо, так что я наконец нашел способ заставить его работать.

Мой tableViewController был встроен в NavigationController.Я удалил это (так как я мог обойтись без этого, согласно моей потребности).Из этого View Controller я рисую последовательность, которая «Показывает» мой целевой вид.Из моего другого ViewController (он встроен в NavigationController) я рисую полезную подсказку, которая модально представляет мое целевое представление.

С кодом, предоставленным в моем первом посте, он работает.Единственное, чего я не понял, это то, почему NavigationController из моего TableViewController, вероятно, приводил к тому, что он не работал должным образом.

0 голосов
/ 27 ноября 2018

Попробуйте что-то вроде этого

if let navigationController = presentingViewController as UINavigationController {
    navigationController.popViewController(animated: true)
} else if let viewController = presentingViewController as UIViewController {
    dismiss(animated: true, completion: nil)
} else {
    fatalError("the LendingViewController is not inside a navigation controller.")
}

Если я понял, что вы хотите использовать dismiss, когда вы найдете UIViewController, и вывести навигацию, когда вы найдете UINavigationController верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...