在 Swift 中使用 UIAlertViewController 时无法从 shouldPerformSegue 返回控制
Posted
技术标签:
【中文标题】在 Swift 中使用 UIAlertViewController 时无法从 shouldPerformSegue 返回控制【英文标题】:Cant return control from shouldPerformSegue when using UIAlertViewController in Swift 【发布时间】:2016-09-27 16:34:45 【问题描述】:我在 shouldPerformSegue 中使用以下代码。我想根据用户是选择删除还是取消来停止或继续 segue。
我注意到 segue 由于警报而停止。如果我删除警报,则 segue 可以正常工作。
shouldPerformSegue
使用此类验证的位置是否不正确?
谢谢。
let alertController = UIAlertController(title: "Confirm Delete", message: "Are you sure?", preferredStyle: UIAlertControllerStyle.alert)
let deletelAction = UIAlertAction(title: "Delete", style: UIAlertActionStyle.destructive) (result : UIAlertAction) -> Void in
print("Delete")
if self.selection != nil
if self.selection!.delete() == true //this is database call
self.success = true
else
self.success = false
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel) (result : UIAlertAction) -> Void in
print("Cancelled delete")
self.success = false
alertController.addAction(deletelAction)
alertController.addAction(cancelAction)
self.present(alertController, animated: true, completion: nil)
return success
【问题讨论】:
您在闭包中将success
设置为true/false
,因此您应该使用回调而不是return
方法。
Santosh,我还没用过回调,所以需要先学习。会退房的。
【参考方案1】:
感谢Paulw11 到this question 的评论,我找到了答案。
所以我从 Delete bar 按钮中删除了 unwind segue,并从 View Controller 添加到 Exit。然后我从删除操作方法中以编程方式调用这个 segue。这行得通。
但是我注意到 shouldPerformSegue
没有被调用。原因在this link 由nburk 解释,如果以编程方式调用segue,则不会调用shouldPerformSegue
。这真是苹果工程师的聪明:)
【讨论】:
以上是关于在 Swift 中使用 UIAlertViewController 时无法从 shouldPerformSegue 返回控制的主要内容,如果未能解决你的问题,请参考以下文章
swift 优雅地处理Swift中可本地化的字符串。注意:此代码在Swift 2中,需要在现代Swift中使用更新。
在 Swift 项目中使用 Objective C 类中的 Swift 类
在 Swift 项目中使用 Objective C 类中的 Swift 类