呈现警报后的功能 Swift

Function after presenting Alert Swift

TLDR
有没有一种方法可以在 UIAlert 出现之前得到通知。在弹出警报之前或之后,是否可以在 ViewController 中调用 viewDidLoad/viewWillLoad 类型的函数?

我的问题
我的 View Controller 正在收到来自我的应用程序委托中的方法的警报。我的 View Controller 在应用程序委托中调用一个方法,如果出现问题,该方法可以发送 UIAlert。虽然这看起来是个糟糕的设计,但我无法更改它。我需要某种方式来知道出现了警报。

你可以试试

// do before 
self.present(alert,animated:true) {
    // do after
}

Sol1:

当你调用 Appdelegate func 和内部应用程序委托时添加一个完成块 return 像上面的代码一样完成 // do after

Sol2:

在应用委托和调用它的 VC 之间设置一个委托

Sol3:

使用

 NotificationCenter.default.addObserver(
        self,
        selector: #selector(listenForNotification),
        name: Notification.Name(rawValue: "AlertShowed"),
        object: nil)

里面 VC

这在 Appdelagete 警报完成中

 NotificationCenter.default.post(name: Notification.Name("AlertShowed"), object:"")

函数 present(_:animated:completion:) 采用可选的完成处理程序 completion。如果您提供完成处理程序,它会在模式显示后被调用。您使用 present(_:animated:completion:) 显示 UIAlertControllers,因此只需传入完成处理程序即可。

如果您从 appdelegate 中的方法中打开警报,那么您应该了解如何在视图控制器上保留引用并在显示警报之前调用特定方法。

甚至,您可以实现一个 pub sub 设计,让您的控制器在通知中心注册一个自定义通知名称,call/post 在显示警报之前来自 appdelegate 的通知,不要忘记在控制器关闭后移除观察器。

选择权在你