How to use MBProgressHUD with swift

52,802

Solution 1

Updated Answer:

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

To dismiss the ProgressHUD:

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

Solution 2

You can also try this approach which will keep the other activity running in the background allowing the UI to remain responsive, providing users with a better experience. This is the intended/recommended approach for using the 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...
    }
}

Solution 3

Swift 3 extensions

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

Solution 4

Create Extension to Easy to use and throughout application

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)
        }
    }
}

USAGE:

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

2. HIDE - self.dismissHUD(isAnimated: true)

Solution 5

Go through the below code

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

If you want to dismiss the HUD

MBProgressHUD.hideHUDForView(self.view, animated: true)
Share:
52,802

Related videos on Youtube

vimal prakash
Author by

vimal prakash

Updated on April 06, 2020

Comments

  • vimal prakash
    vimal prakash about 4 years

    here is my code , but it showing the progress . is there any error in this code? please give some idea to fix this, or give some link related to this.

    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)          
          }
       }
    
    }
    
    • Matthias Bauch
      Matthias Bauch over 9 years
      do your http request asynchronously
  • Castor
    Castor over 7 years
    hideAllHUDs is deprecated. We should store references when using more than one HUD per view.
  • Cesare
    Cesare almost 7 years
    very unnecessary
  • Shubham Naik
    Shubham Naik almost 7 years
    Try this HUD library for iOS in swift github.com/shubh10/JustHUD
  • Aashish
    Aashish over 6 years
    @EricDXS can we also set the success message "Done" provided by the MBProgressHUD.
  • Manish
    Manish over 4 years
    Easy to implement. Thanks