Как использовать оповещение для подтверждения или отмены просмотра перехода? - PullRequest
0 голосов
/ 25 сентября 2018

При определенных условиях, если пользователи намереваются покинуть текущий вид (например, вынуть текущий вид, нажать другой вид или выбрать другие элементы вкладки и т. Д.), Должен быть представлен UIAlertController для подтверждения реального намерения пользователя.

Пользователи могут нажать OK, чтобы продолжить переход к просмотру, или Отмена, чтобы остаться в текущем просмотре.

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    if someConditions {
        promptUIAlert()
    }
}

Какие решения могут удовлетворить эти требования?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы не можете перехватить и удержать пользователя в том же ViewController после срабатывания viewWillDissaper.Вы должны сделать это заранее.Я предлагаю добавить UIBarButton с меткой Back to navigationItem.leftBarButtonItem и вручную проверить, хочет ли пользователь перемещаться или нет.Это самое близкое, что вы можете получить.

также вы можете использовать UIAlertViewController для подтверждения того, хочет ли пользователь перемещаться или нет.

    //inside viewDidLoad
    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(handleBack))

    //define another function to handle the selctor
    @objc func handleCancel(){
       if someConditions {
                promptUIAlert()
        }
    }

    //you function should be like this with UIAlertController
    func promptUIAlert(){
        let alertController = UIAlertController(title: "Error", message: "Some message", preferredStyle: .alert)
        let CancelAction = UIAlertAction(title: "Cancel", style: .default) { (action) in
         //type your custom code here for cancel action
        }
let OkAction = UIAlertAction(title: "OK", style: .default) { (action) in
         //type your custom code here for OK action
        }
        alertController.addAction(OKAction)
        alertController.addAction(CancelAction)

        self.present(alertController, animated: true)
    }

Выполнение чего-либо внутри viewWillDissaper было бы удобно для сохранения некоторых несохраненных данных позадиэкран.Но не запрашивать и не спрашивать пользователя, хотят ли они остаться в том же ViewController.

0 голосов
/ 25 сентября 2018

Прежде всего, вы не можете обработать это viewWillDisappear, потому что на этом этапе уже было решено, что представление исчезнет .Вы должны обрабатывать это везде, где у вас есть переходы просмотра (push, pop, present, dismiss).

Вы должны обрабатывать переходы в действии предупреждения о подтверждении.Вы предупреждаете, что выглядело бы примерно так:

let alert = UIAlertController(title: "Wait!", message: "Are you sure you want to leave this view?", preferredStyle: .alert)
let ok = UIAlertAction(title: "OK", style: .default) { (alertAction) in
    //Handle view transitioning here
}
let cancel = UIAlertAction(title: "Cancel", style: .destructive) { (alertAction) in
    //Do nothing?
}
alert.addAction(ok)
alert.addAction(cancel)
present(alert, animated: true, completion: nil)
...