#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. Функция выполняет некоторую проверку введенных пользователем данных, и если все выглядит нормально, она вызывает разматывающий переход.