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("请稍等")