注销时创建 toast (iOS)

Create toast when log out (iOS)

我正在为一个拥有用户的应用程序工作。其中一个功能是允许用户注销并被重定向到第一页。当用户注销时,我遇到了这个问题,应在应用程序的第一个视图上显示祝酒消息 "You logged out" 并从不同的页面接收命令。基本上是一个 toast 消息,它可以适用于所有视图,而不仅仅是当前视图。

我设法在用户注销后调用 toast 函数,但它不会显示该消息,因为当前视图在有机会显示它之前已被关闭。

这是调用的函数:

func showToast(controller: UIViewController, message : String, seconds: Double) {

    let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
    alert.view.backgroundColor = UIColor.black
    alert.view.alpha = 0.6
    alert.view.layer.cornerRadius = 15
    controller.present(alert, animated: true)

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + seconds) {
        alert.dismiss(animated: true)
    }
}
  1. 如果您不知道当前显示的 VC 是哪个,您可以在此处使用此扩展程序:

    extension UIWindow {
    func topViewController() -> UIViewController? {
        var top = self.rootViewController
        while true {
            if let presented = top?.presentedViewController {
                top = presented
            } else if let nav = top as? UINavigationController {
                top = nav.visibleViewController
            } else if let tab = top as? UITabBarController {
                top = tab.selectedViewController
            } else {
                break
            }
        }
        return top
    }
    

    }

那你可以这样称呼它:

if let topVC = UIApplication.shared.keyWindow?.topViewController() {
    topVC.present(alert, animated: true)
}
  1. 另一种选择是您 pop/dismiss 您的 viewcontroller 在您解除警报后:

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + seconds) {
    alert.dismiss(animated: true)
    // popViewController or dismiss here
    }