Проверете дали можете да използвате размотаване, преди да използвате натискане

При навигация, използваща segues, от основния контролер можем да натиснете контролер A или B.

От A можем да бутнем C, което може да бутне B, което по-късно може да се развие до A, за да рестартира процеса.

От B можем да бутнем A, което може да бутне C, което по-късно може да се развие до B, за да рестартира процеса.

В B имаме бутон, който казва „Отидете до A“, който трябва да развие или натисне контролера A в зависимост от сценария.

диаграма

Как мога лесно да разбера дали мога да се отпусна, преди да изпълня бутащата сегия?

Засега използвам масива navigationController, за да проверя дали предишният контролер е C за натискане или отвиване. Бих искал да знам общо решение за този вид цикли, използвайки segues, например:

ако B може да се развие до A тогава развийте иначе натиснете A

И така, въпросът е как мога да проверя B може да се отвие до A без достъп до масива navigationController?


person Nextorlg    schedule 14.03.2014    source източник
comment
Намерихте ли някога решение на това?   -  person Ryan Caskey    schedule 17.05.2014
comment
За съжаление не, трябваше да приложа заобиколно решение, за да задам „unwindMode“ в B, след което, когато иска да представи A, той проверява режима, за да използва push segue или unwind segue   -  person Nextorlg    schedule 21.05.2014
comment
Защо просто не използвате popToRootViewController, тъй като целта ви тук е да се върнете обратно към контролера за root изглед, доколкото разбирам.   -  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