当前位置: > > > Swift - 第三方透明指示器MBProgressHUD使用详解3(封装常用方法)

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