注销时创建 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)
}
}
如果您不知道当前显示的 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)
}
另一种选择是您 pop/dismiss 您的 viewcontroller 在您解除警报后:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + seconds) {
alert.dismiss(animated: true)
// popViewController or dismiss here
}
我正在为一个拥有用户的应用程序工作。其中一个功能是允许用户注销并被重定向到第一页。当用户注销时,我遇到了这个问题,应在应用程序的第一个视图上显示祝酒消息 "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)
}
}
如果您不知道当前显示的 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)
}
另一种选择是您 pop/dismiss 您的 viewcontroller 在您解除警报后:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + seconds) { alert.dismiss(animated: true) // popViewController or dismiss here }