Swift - 第三方透明指示器MBProgressHUD使用详解3(封装常用方法)
六、扩展 MBProgressHUD,封装常用方法
通常情况下,提示信息无非就这几种类型:操作成功的提示、失败的提示、普通消息提示、等待提示。我们可以对 MBProgressHUD 做一个扩展,把这 4 种类型提示的方法封装起来,方便使用。
1,扩展 MBProgressHUD
这里我们对 MBProgressHUD 类进行扩展(MBProgressHUD+.swift),增加 4 种不同类型提示的显示方法。注意:
- 当成功、失败的提示显示后,经过 1 秒钟会自动隐藏消失。
- 而普通消息提示和等待提示显示后不会自动取消,需要手动将其隐藏。
import Foundation extension MBProgressHUD { //显示等待消息 class func showWait(_ title: String) { let view = viewToShow() let hud = MBProgressHUD.showAdded(to: view, animated: true) hud.label.text = title hud.removeFromSuperViewOnHide = true } //显示普通消息 class func showInfo(_ title: String) { let view = viewToShow() let hud = MBProgressHUD.showAdded(to: view, animated: true) hud.mode = .customView //模式设置为自定义视图 hud.customView = UIImageView(image: UIImage(named: "info")!) //自定义视图显示图片 hud.label.text = title hud.removeFromSuperViewOnHide = true } //显示成功消息 class func showSuccess(_ title: String) { let view = viewToShow() let hud = MBProgressHUD.showAdded(to: view, animated: true) hud.mode = .customView //模式设置为自定义视图 hud.customView = UIImageView(image: UIImage(named: "tick")!) //自定义视图显示图片 hud.label.text = title hud.removeFromSuperViewOnHide = true //HUD窗口显示1秒后自动隐藏 hud.hide(animated: true, afterDelay: 1) } //显示失败消息 class func showError(_ title: String) { let view = viewToShow() let hud = MBProgressHUD.showAdded(to: view, animated: true) hud.mode = .customView //模式设置为自定义视图 hud.customView = UIImageView(image: UIImage(named: "cross")!) //自定义视图显示图片 hud.label.text = title hud.removeFromSuperViewOnHide = true //HUD窗口显示1秒后自动隐藏 hud.hide(animated: true, afterDelay: 1) } //获取用于显示提示框的view class func viewToShow() -> UIView { var window = UIApplication.shared.keyWindow if window?.windowLevel != UIWindowLevelNormal { let windowArray = UIApplication.shared.windows for tempWin in windowArray { if tempWin.windowLevel == UIWindowLevelNormal { window = tempWin; break } } } return window! } }
2,使用样例
(1)效果图
(2)不同类型的提示框的显示都只需一行代码即可。
//显示成功消息 MBProgressHUD.showSuccess("操作成功") //显示失败消息 MBProgressHUD.showError("操作失败") //显示普通消息 MBProgressHUD.showInfo("这是普通提示消息") //显示等待消息 MBProgressHUD.showWait("请稍等")
附:对 UIView 进行扩展
我们也可以换个思路,不对 MBProgressHUD 进行扩展,而是对 UIView 进行扩展,增加相关的方法。1,扩展 UIView
这里我们对 UIView 类进行扩展(UIView+HUD.swift),增加 4 种不同类型提示的显示方法。注意:
- 当成功、失败的提示显示后,经过 1 秒钟会自动隐藏消失。
- 而普通消息提示和等待提示显示后不会自动取消,需要手动将其隐藏。
import Foundation extension UIView { //显示等待消息 func showWait(_ title: String) { let hud = MBProgressHUD.showAdded(to: self, animated: true) hud.label.text = title hud.removeFromSuperViewOnHide = true } //显示普通消息 func showInfo(_ title: String) { let hud = MBProgressHUD.showAdded(to: self, animated: true) hud.mode = .customView //模式设置为自定义视图 hud.customView = UIImageView(image: UIImage(named: "info")!) //自定义视图显示图片 hud.label.text = title hud.removeFromSuperViewOnHide = true } //显示成功消息 func showSuccess(_ title: String) { let hud = MBProgressHUD.showAdded(to: self, animated: true) hud.mode = .customView //模式设置为自定义视图 hud.customView = UIImageView(image: UIImage(named: "tick")!) //自定义视图显示图片 hud.label.text = title hud.removeFromSuperViewOnHide = true //HUD窗口显示1秒后自动隐藏 hud.hide(animated: true, afterDelay: 1) } //显示失败消息 func showError(_ title: String) { let hud = MBProgressHUD.showAdded(to: self, animated: true) hud.mode = .customView //模式设置为自定义视图 hud.customView = UIImageView(image: UIImage(named: "cross")!) //自定义视图显示图片 hud.label.text = title hud.removeFromSuperViewOnHide = true //HUD窗口显示1秒后自动隐藏 hud.hide(animated: true, afterDelay: 1) } }
2,使用样例
直接调用当前 view 的扩展方法即可显示不同类型的提示框。//显示成功消息 self.view.showSuccess("操作成功") //显示失败消息 self.view.showError("操作失败") //显示普通消息 self.view.showInfo("这是普通提示消息") //显示等待消息 self.view.showWait("请稍等")