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)
Related videos on Youtube
Author by
vimal prakash
Updated on April 06, 2020Comments
-
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 over 9 yearsdo your http request asynchronously
-
-
Castor over 7 yearshideAllHUDs is deprecated. We should store references when using more than one HUD per view.
-
Cesare almost 7 yearsvery unnecessary
-
Shubham Naik almost 7 yearsTry this HUD library for iOS in swift github.com/shubh10/JustHUD
-
Aashish over 6 years@EricDXS can we also set the success message "Done" provided by the MBProgressHUD.
-
Manish over 4 yearsEasy to implement. Thanks