У меня есть PageViewController, P , который содержит два дочерних ViewController, A и B .И A , и B позволяют пользователю вводить некоторые данные в форму.Если пользователь начинает редактировать форму, я отслеживаю логическую переменную:
var formEdited = false;
В случае, если пользователь хотел бы отойти от формы, а formEdited - true, я бы хотелпредупредите их и скажите «Вы уверены, что хотите отказаться от изменений, внесенных в форму?».Если они уверены, я бы хотел сохранить их данные.В противном случае, я бы позволил им отбросить данные и продолжить их смахиванием.
В результате я попытался сделать что-то подобное в обоих A и B :
override func viewWillDisappear(_ animated: Bool) {
if (formEdited) {
let dialogMessage = UIAlertController(title: "Confirm", message: "Are you sure you want to abandon the changes you have in the form?", preferredStyle: .alert);
let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in
super.viewWillDisappear(animated);
})
let cancel = UIAlertAction(title: "Cancel", style: .cancel) { (action) -> Void in
// TODO:: what to do here
self.myCustomFuctionToStoreData();
super.viewWillAppear(true);
}
dialogMessage.addAction(ok);
dialogMessage.addAction(cancel);
self.present(dialogMessage, animated: true, completion: nil);
}
}
В результате я вижу свое всплывающее окно, когда пытаюсь провести пальцем в сторону от просмотра.Если я нажму «Отмена», вид останется.(Это то, что я хочу) Однако, если я снова попытаюсь провести пальцем, я больше не вижу окно с предупреждением, и пользовательский интерфейс меняется.(Это не то, что я хочу. Я хочу, чтобы это повторилось)
Я считаю, что мой код должен реагировать более адекватно, когда viewWillDisappear.Я думаю, что мне нужно как-то предотвратить исчезновение представления после этой строки выше:
// TODO:: what to do here
Примечание: я пробовал ответы из нескольких других постов, например: Как отключить свайпжест UIPageViewController? , Отключить жест смахивания в UIPageViewController или даже эти два: Отключить UIPageViewController Swipe - Swift и Проверка того, что UIViewController собирается получить Popped изстек навигации? .
Последние два могут быть наиболее подходящими, но я не хочу отключать какие-либо жесты, и при этом я не вижу, как я могу ввести предупреждение.Я просто хочу сделать смахивание от дочернего представления условной функцией.Как бы я сделал это из моего дочернего представления (потомка PageView) в Swift 4?