可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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)
}
}
}
回答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)
回答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...
}
}
回答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
回答4:
I have added an extension over UIViewController to make it easier.
Swift 4.1
import UIKit
import MBProgressHUD
extension UIViewController {
func showHUD(progressLabel:String){
let progressHUD = MBProgressHUD.showAdded(to: self.view, animated: true)
progressHUD.label.text = progressLabel
}
func dismissHUD(isAnimated:Bool) {
MBProgressHUD.hide(for: self.view, animated: isAnimated)
}
}
Usage:
//Add hud for showing progress
self.showHUD(progressLabel: "Sending...")
//Hide Hud
DispatchQueue.main.async {
self.dismissHUD(isAnimated: true)
}
Hope it helps!!!
回答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)
回答6:
Use the below code to render MBProgressHUD and after some action completed hide it as described.
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);
}
}
For more information follow this tutorial:
http://sourcefreeze.com/mbprogresshud-example-swift/
回答7:
Try it with 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)
}
If Swift compiler warning: hideAllHUDs is deprecated. We should store references when using more than one HUD per view
Use:
func hideLoadingHUD(for_view: UIView) {
MBProgressHUD.hide(for: for_view, animated: true)
}
回答8:
Added to @EricDXS's answer,
The Swift 3 version is here
To show:
let loadingNotification = MBProgressHUD.showAdded(to: self.view, animated: true)
loadingNotification.mode = MBProgressHUDMode.indeterminate
loadingNotification.label.text = "Loading"
To dismiss:
loadingNotification.hide(animated: true)
回答9:
I solved it like this:
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:
step 1 : Download "MBProgressHUD.h" and "MBProgressHUD.m" file and Add both file into your project. it will ask you to Bridging for Objective C files. if you already done bridging then it won't ask.
step 2 : In Bridging File import MBProgressHUD "import MBProgressHUD.h"
step 3 : use below code to show progress hud or hide hud.
for Show
DispatchQueue.main.async {
MBProgressHUD.showAdded(to: self.view, animated: true)
}
for hide
DispatchQueue.main.async {
MBProgressHUD.hide(for: self.view, animated: true)
}
回答11:
Install MBProgressHUD to your project using CocoaPods Add pod in podfile pod 'MBProgressHUD'. And then Install Pod by 'pod install'.
For detail explanation - http://ios-support.blogspot.in/2017/04/how-to-use-mbprogresshud-progress-in.html