使用UIAlertController时:
var alert = UIAlertController(title: "Core Location",
message: "Location Services Disabled!",
preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default,
handler: nil))
self.navigationController.presentViewController(alert, animated: true,
completion: nil)
我注意到警报视图的解雇似乎是自动完成的。 不应该通过委托调用呈现 ViewController来解雇所呈现的ViewController吗?
答案 0 :(得分:6)
解雇是"包括"在presentViewController
电话中。您不需要委托,因为您有完成块。在这个块中,您将通常放入委托回调中的内容放入,除了取消警报的调用。
至于"最佳实践"我担心,我注意到在许多API中,Apple用完成块替换了委托回调。 Apple通常建议使用块语法。我猜测这可能部分是因为它有助于将相关的代码部分保持在一起。
答案 1 :(得分:1)
有一种优雅的方式!只需在警报控制器的cancel动作中编写动作或函数。 (此处的操作样式应为.cancel
)
Swift 3的代码
let Alert: UIAlertController = UIAlertController(title: nil, message: nil, preferredStyle: UIAlertControllerStyle.actionSheet)
let OkAction: UIAlertAction = UIAlertAction(title: “Ok”, style: .default) { ACTION in
//Will be called when tapping Ok
}
let CancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .cancel) {ACTION in
// Will be called when cancel tapped or when alert dismissed.
// Write your action/function here if you want to do something after alert got dismissed”
}
Alert.addAction(OkAction)
Alert.addAction(CancelAction)
present(Alert, animated: true, completion: nil)
答案 2 :(得分:1)
某些情况下,您可能想使用此功能:
class MyAlertController : UIAlertController {
var dismissHandler : (()->())?
override func viewDidDisappear(_ animated: Bool) {
dismissHandler?()
super.viewDidDisappear(animated)
}
}
用法:
let alert = MyAlertController(title: ...
let cancelButton = UIAlertAction(titl
alert.dismissHandler = { /*...do something */ }
alert.addAction(cancelButton)
...