Проверьте, можете ли вы использовать unwind segue, прежде чем использовать push-переход.

В навигации с использованием переходов из корневого контроллера мы можем нажать контроллер A или B.

Из A мы можем отправить C, который может отправить B, который позже может вернуться к A, чтобы перезапустить процесс.

Из B мы можем отправить A, который может отправить C, который позже может вернуться к B, чтобы перезапустить процесс.

В B у нас есть кнопка с надписью «Перейти к A», которая должна раскручивать или нажимать контроллер A в зависимости от сценария.

диаграмма

Как я могу легко узнать, могу ли я расслабиться, прежде чем выполнять push-переход?

На данный момент я использую массив navigationController, чтобы проверить, является ли предыдущий контроллер C для нажатия или раскрутки. Я хотел бы знать общее решение для такого рода циклов с использованием переходов, например:

если B может размотаться до A то развернуться иначе нажать A

Итак, вопрос в том, как я могу проверить, что B может раскрутиться до A, не обращаясь к массиву navigationController?


person Nextorlg    schedule 14.03.2014    source источник
comment
Вы когда-нибудь находили решение этой проблемы?   -  person Ryan Caskey    schedule 17.05.2014
comment
К сожалению, нет, мне пришлось реализовать обходной путь, чтобы установить «режим раскрутки» в B, а затем, когда он хочет представить A, он проверяет режим, чтобы использовать переход push или переход segue.   -  person Nextorlg    schedule 21.05.2014
comment
Почему бы вам просто не использовать popToRootViewController, поскольку ваша цель здесь - вернуться к корневому контроллеру представления, насколько я понимаю.   -  person Harish Suthar    schedule 03.12.2019


Ответы (1)


Вот мое общее решение этой проблемы для приложения Swift:

  • предположить сдерживание UINavigationController
  • определите unwindToXXX: методы в каждом XXX, на который вы хотите раскрутиться
  • в каждом YYY, который может либо раскрутиться, либо перейти к XXX, определить переходы unwindToXXX и showXXX

Затем вы можете просто позвонить gotoController("unWindToXXX", "showXXX") заданному

func gotoController(unwind: String, show: String) {
    let action = Selector(unwind + ":")
    if let target = navigationController?.viewControllerForUnwindSegueAction(action, fromViewController: self, withSender: self)
    {
        assert(target.canPerformUnwindSegueAction(action, fromViewController: self, withSender: self))
        performSegueWithIdentifier(unwind, sender: self)
    } else {
        performSegueWithIdentifier(show, sender: self)
    }
}
person Alex Curylo    schedule 13.05.2015
comment
ViewControllerForUnwindSegueAction устарел в iOS 9.0. - person Shai Balassiano; 15.06.2015