如何快速使用 MBProgressHUD

Posted

技术标签:

【中文标题】如何快速使用 MBProgressHUD【英文标题】:How to use MBProgressHUD with swift 【发布时间】:2014-11-12 07:40:05 【问题描述】:

这是我的代码,但它显示了进度。这段代码有什么错误吗?请提供一些解决此问题的想法,或提供一些与此相关的链接。

class Approval: UIViewController 

var hud: MBProgressHUD = MBProgressHUD()

override func viewDidLoad() 
    super.viewDidLoad()

    fetchData()

   func fetchData()
      hud.show(true)
      // doing some http request
      dispatch_async(dispatch_get_main_queue()) 
         hud.hide(true)          
      
   


【问题讨论】:

异步执行你的http请求 【参考方案1】:

更新答案:

let loadingNotification = MBProgressHUD.showAdded(to: view, animated: true)
loadingNotification.mode = MBProgressHUDMode.indeterminate
loadingNotification.label.text = "Loading"

关闭 ProgressHUD:

MBProgressHUD.hideAllHUDs(for: view, animated: true)

【讨论】:

hideAllHUDs 已弃用。当每个视图使用多个 HUD 时,我们应该存储引用。 在 swift 中试用这个适用于 ios 的 HUD 库 github.com/shubh10/JustHUD @EricDXS 我们能否也设置 MBProgressHUD 提供的成功消息“Done”。【参考方案2】:

您也可以尝试这种方法,让其他活动保持在后台运行,让 UI 保持响应,为用户提供更好的体验。这是使用 MBProgressHUD 的预期/推荐方法。

let progressHUD = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
progressHUD.labelText = "Loading..."

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)) 

    // ...Run some task in the background here...

    dispatch_async(dispatch_get_main_queue()) 
        progressHUD.hide(true)

        // ...Run something once we're done with the background task...
    

【讨论】:

【参考方案3】:

Swift 3 扩展

import Foundation
import MBProgressHUD
import QuartzCore

extension UITableViewController 
    func showHudForTable(_ message: String) 
        let hud = MBProgressHUD.showAdded(to: self.view, animated: true)
        hud.label.text = message
        hud.isUserInteractionEnabled = false
        hud.layer.zPosition = 2
        self.tableView.layer.zPosition = 1
    


extension UIViewController 
    func showHud(_ message: String) 
        let hud = MBProgressHUD.showAdded(to: self.view, animated: true)
        hud.label.text = message
        hud.isUserInteractionEnabled = false
    

    func hideHUD() 
        MBProgressHUD.hide(for: self.view, animated: true)
    


// Use extensions

【讨论】:

【参考方案4】:

创建易于使用并贯穿整个应用程序的扩展程序

extension UIViewController 

    func showHUD(progressLabel:String)
        DispatchQueue.main.async
            let progressHUD = MBProgressHUD.showAdded(to: self.view, animated: true)
            progressHUD.label.text = progressLabel
        
    

    func dismissHUD(isAnimated:Bool) 
        DispatchQueue.main.async
            MBProgressHUD.hide(for: self.view, animated: isAnimated)
        
    

用法:

1. SHOW - self.showHUD(progressLabel: "Loading...")

2。隐藏 - self.dismissHUD(isAnimated: true)

【讨论】:

易于实施。谢谢【参考方案5】:

通过下面的代码

class ViewController: UIViewController, MBProgressHUDDelegate 
    var hud : MBProgressHUD = MBProgressHUD()
    func fetchData() 
        hud = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
        hud.mode = MBProgressHUDModeIndeterminate
        hud.labelText = "Loading"
    

如果你想关闭 HUD

MBProgressHUD.hideHUDForView(self.view, animated: true)

【讨论】:

【参考方案6】:

用 Swift 3 试试吧:

func showLoadingHUD(to_view: UIView) 
    let hud = MBProgressHUD.showAdded(to: to_view, animated: true)
    hud.label.text = "Loading..."


func hideLoadingHUD(for_view: UIView) 
    MBProgressHUD.hideAllHUDs(for: for_view, animated: true)

如果 Swift 编译器警告:hideAllHUDs is deprecated. We should store references when using more than one HUD per view

用途:

func hideLoadingHUD(for_view: UIView) 
    MBProgressHUD.hide(for: for_view, animated: true)

【讨论】:

【参考方案7】:

使用以下代码呈现 MBProgressHUD,并在完成某些操作后将其隐藏,如所述。

let spinnerActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true);

spinnerActivity.label.text = "Loading";
spinnerActivity.detailsLabel.text = "Please Wait!!";
spinnerActivity.userInteractionEnabled = false;

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0))
    
        // Add some background task like image download, wesite loading. 

        dispatch_async(dispatch_get_main_queue())
            
                spinnerActivity.hideAnimated(true);
        


    

有关更多信息,请遵循本教程: http://sourcefreeze.com/mbprogresshud-example-swift/

【讨论】:

【参考方案8】:

添加到@EricDXS 的回答中,

Swift 3 版本来了

展示:

let loadingNotification = MBProgressHUD.showAdded(to: self.view, animated: true)
loadingNotification.mode = MBProgressHUDMode.indeterminate
loadingNotification.label.text = "Loading"

解雇:

loadingNotification.hide(animated: true)

【讨论】:

【参考方案9】:

我是这样解决的:

import UIKit

class Loader: NSObject 

    class func show(message:String = "Processing...", delegate: UIViewController) 
        var load : MBProgressHUD = MBProgressHUD()
        load = MBProgressHUD.showHUDAddedTo(delegate.view, animated: true)
        load.mode = MBProgressHUDMode.Indeterminate

        if message.length > 0 
            load.labelText = message;
        

        UIApplication.sharedApplication().networkActivityIndicatorVisible = true

    

class func hide(delegate:UIViewController) 
    MBProgressHUD.hideHUDForView(delegate.view, animated: true)
        UIApplication.sharedApplication().networkActivityIndicatorVisible = false
    

【讨论】:

【参考方案10】:

第 1 步:下载“MBProgressHUD.h”和“MBProgressHUD.m”文件并将这两个文件添加到您的项目中。它会要求您桥接目标 C 文件。如果您已经完成了桥接,则它不会询问。

第 2 步:在桥接文件中导入 MBProgressHUD "import MBProgressHUD.h"

第 3 步:使用以下代码显示进度界面或隐藏界面。

展示

DispatchQueue.main.async 
    MBProgressHUD.showAdded(to: self.view, animated: true)

隐藏

DispatchQueue.main.async 
    MBProgressHUD.hide(for: self.view, animated: true)

【讨论】:

非常没必要

以上是关于如何快速使用 MBProgressHUD的主要内容,如果未能解决你的问题,请参考以下文章

如何快速使用完成块?

vivo手机便签如何快速彻底一键换机使用?

快速,如何使用 UICollectionView

如何使用 PromiseKit 重构快速回调以承诺

如何快速使用 MBProgressHUD

如何使用快速上传文件?