如何使用 alert 来确认或取消视图转换?
How to use alert to confirm or cancel view transition?
在某些情况下,如果用户打算离开当前视图(例如,弹出当前视图、推送其他视图或 select 其他选项卡项等),应显示 UIAlertController 以确认用户真正的意图。
用户可以按确定继续视图转换,或按取消留在当前视图。
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if someConditions {
promptUIAlert()
}
}
有什么解决方案可以达到这个要求吗?
首先,你不能处理这个viewWillDisappear
因为此时已经决定视图将消失。无论您有视图转换(推送、弹出、呈现、关闭),您都需要处理此问题。
您必须处理确认警报操作中的转换。您的警报看起来像这样。
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)
一旦 viewWillDissaper
被触发,您就不能在同一个 ViewController
中拦截和保留用户。你应该提前做。我的建议是在 navigationItem.leftBarButtonItem
中添加一个带有标签 Back 的 UIBarButton
并手动检查用户是否要导航。这是你能得到的最接近的。
此外,您可以使用 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.
在某些情况下,如果用户打算离开当前视图(例如,弹出当前视图、推送其他视图或 select 其他选项卡项等),应显示 UIAlertController 以确认用户真正的意图。
用户可以按确定继续视图转换,或按取消留在当前视图。
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if someConditions {
promptUIAlert()
}
}
有什么解决方案可以达到这个要求吗?
首先,你不能处理这个viewWillDisappear
因为此时已经决定视图将消失。无论您有视图转换(推送、弹出、呈现、关闭),您都需要处理此问题。
您必须处理确认警报操作中的转换。您的警报看起来像这样。
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)
一旦 viewWillDissaper
被触发,您就不能在同一个 ViewController
中拦截和保留用户。你应该提前做。我的建议是在 navigationItem.leftBarButtonItem
中添加一个带有标签 Back 的 UIBarButton
并手动检查用户是否要导航。这是你能得到的最接近的。
此外,您可以使用 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.