Почему у одного этапа размотки разное поведение?

#swift #xcode #segue #uistoryboard #unwind-segue

#swift #xcode #segue #uistoryboard #разматывать-segue

Вопрос:

У меня есть приложение Swift, содержащее раскадровку с тремя разными контроллерами просмотра. Пользователь может переходить через эти контроллеры просмотра двумя различными способами:

VC1 -> VC2 -> VC3

или

VC1 -> VC3

Из VC3 пользователи могут нажать кнопку «Назад», которая программно разматывается до VC1 с помощью следующего кода:

 self.performSegue(withIdentifier: "UnwindToVC1", sender: self)
  

Этот этап разматывания связан с этапом разматывания, созданным в раскадровке, который разматывается до следующей функции в VC1:

 @IBAction func unwindToVC1(segue: UIStoryboardSegue) {
    print("Unwind")
}
  

Если пользователь переходит непосредственно из VC1 в VC3, приложение корректно разматывается, возвращая пользователя в VC1 и печатая «Размотать».

Однако, если пользователь переходит с VC1 на VC2 на VC3, размотка все равно возвращает пользователя к VC1, но функция unwindToVC1 никогда не вызывается и «Размотка» никогда не печатается.

Почему один и тот же этап размотки должен вести себя непоследовательно? Есть ли способ гарантировать, что функция размотки в VC1 вызывается всегда?

Комментарии:

1. Я не могу воспроизвести ваш результат. Мой тест выводит «Разматывать» в обоих случаях. Я пробовал оба модальных перехода и show (push).

2. Куда вы помещаете self.performSegue(withIdentifier: "UnwindToVC1", sender: self) код?

3. @vacawama Спасибо за попытку! Да, это очень странно. Я просто использую модальные переходы.

4. @jms Существует функция IBAction, которая привязана к событию «touch up inside» кнопки в VC3. Функция выполняет некоторую проверку введенных пользователем данных, и если все выглядит нормально, она вызывает разматывающий переход.