Добавить оповещение для панели навигации Назад Действие, прежде чем перейти к View Controller - PullRequest
0 голосов
/ 07 января 2019

Итак, у меня есть vc add add, и для кнопки назад я хочу, чтобы всплыло предупреждение, чтобы спросить пользователя, хотят ли они продолжить, потому что его информация будет потеряна. Я читал и нашел использовать эту функцию, но она не работает так, как я хочу. Предупреждение появляется, когда представление загружается и после этого возвращается к главному vc. Вот код и несколько картинок. Спасибо.

override func willMove(toParent parent: UIViewController?) {
    let alertController = UIAlertController(title: "Are You Sure?", message: "If You Proceed, All Data On This Page Will Be Lost", preferredStyle: .alert)
    let action = UIAlertAction(title: "Ok", style: .default, handler: nil)
    alertController.addAction(action)
    self.present(alertController, animated: true)
}

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Вы должны добавить пользовательскую кнопку "Назад" в вашем viewDidload, например,

   override func viewDidLoad() {
            super.viewDidLoad()
            let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItem.Style.plain, target: self, action: #selector(self.backAction(sender:)))
            self.navigationItem.leftBarButtonItem = newBackButton

        }

Это метод действия кнопки «Назад», так что вы можете добавить свое предупреждение здесь и добавить действие так, как вы хотите, вот так:

@objc func backAction(sender: UIBarButtonItem) {

    let alertController = UIAlertController(title: "Are You Sure?", message: "If You Proceed, All Data On This Page Will Be Lost", preferredStyle: .alert)
    let okAction = UIAlertAction(title: "Ok", style: .default) { (result : UIAlertAction) -> Void in
        self.navigationController?.popViewController(animated: true)
    }

    let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil)
    alertController.addAction(cancelAction)
    alertController.addAction(okAction)
    self.present(alertController, animated: true)
}
0 голосов
/ 07 января 2019
override func viewDidLoad {
        super.viewDidLoad()
        self.navigationItem.hidesBackButton = true
        let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(YourViewController.back(sender:)))
        self.navigationItem.leftBarButtonItem = newBackButton
    }

    func back(sender: UIBarButtonItem) {
        let alertController = UIAlertController(title: "Are You Sure?", message: "If You Proceed, All Data On This Page Will Be Lost", preferredStyle: .alert)
        let stayAction = UIAlertAction(title: "Stay", style: UIAlertAction.Style.default) { (result : UIAlertAction) -> Void in
          print("Stay")
        }
        let leaveAction = UIAlertAction(title: "GO Back", style: UIAlertAction.Style.default) { (result : UIAlertAction) -> Void in
           self.navigationController?.popViewController(animated: true)
        }
        self.present(alertController, animated: true)
    }
...