gpt4 book ai didi

ios - 当按下按钮时 UIAlertController 被关闭时得到通知

转载 作者:行者123 更新时间:2023-11-29 11:42:37 24 4
gpt4 key购买 nike

我想在任何 UIAlertController 因用户点击其中一个警报按钮而关闭自身(动画完成)之前和之后立即执行一些操作并呈现一些 UI。

当用户按下了我的 UIAlertController 中的某个按钮并且它将被关闭然后又被关闭时,我如何得到通知?

在文档中,建议不要子类化 UIAlertController。我仍然尝试过子类化,认为它可能在内部调用 func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) 本身。类似self.dismiss(...,但在iOS10上好像不是这样。

我还尝试将“手动”关闭添加到 UIAlertAction 处理程序中:

let alert = UIAlertController.init(...
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { action in
alert.dismiss(animated: true, completion: {
print("Dismissed")
})
})
alert.addAction(defaultAction)

但似乎警报在按下按钮后但在调用处理程序之前被解除。无论如何它也不起作用。即使它有效,记住将我的代码添加到每个 UIAlertAction 处理程序中也会有点麻烦。

如果有任何想法,我将不胜感激。

最佳答案

虽然不建议子类化,但您可以使用像这样的简单子(monad)类:

class CustomAlertController: UIAlertController {

var willDisappearBlock: ((UIAlertController) -> Void)?
var didDisappearBlock: ((UIAlertController) -> Void)?

override func viewWillDisappear(_ animated: Bool) {
willDisappearBlock?(self)
super.viewWillDisappear(animated)
}

override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
didDisappearBlock?(self)
}

}

然后你可以像这样使用它:

let alert = CustomAlertController(title: "Alert", message: "This is an alert. Press Yes or No.", preferredStyle: .alert)
alert.willDisappearBlock = { alert in
print("\(alert) will disappear")
}
alert.didDisappearBlock = { alert in
print("\(alert) did disappear")
}

alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: { (yesAction) in
print("User tapped Yes.")
}))
alert.addAction(UIAlertAction(title: "No", style: .cancel, handler: { (yesAction) in
print("User tapped No.")
}))
present(alert, animated: true) {
print("presentCompletion")
}

输出顺序如下:

  1. 完成
  2. 会消失
  3. 做了消失
  4. 用户点了"is"。

关于ios - 当按下按钮时 UIAlertController 被关闭时得到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45640034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com