在我的项目中,每个用户交互事件都会进行网络调用(这是TCP,而不是HTTP)。我需要活动指示器是全局的,以便从随机显示UIViewController
和对类隐藏NetworkActivityManager
(用于处理网络活动的自定义类,它不是UIViewController或UIView的子类)。
在网上搜索后,我发现MBProgressHUD用于相同的目的,但是我找不到如何在全球范围内使用它的示例。(说全局是指MBProgressHUD的单例对象和显示和隐藏它的类方法。)
以下是我尝试过的尝试,但是失败了:在AppDelegate.h中:
@property (nonatomic, retain) MBProgressHUD *hud;
在AppDelegate.m中:
@synthesize hud;
在一些随机的UIViewController对象中:
appDelegate.hud = [MBProgressHUD showHUDAddedTo:appDelegate.navigationController.topViewController.view animated:YES];
appDelegate.hud.labelText = @"This will take some time.";
在隐藏它的同时,从NetworkActivityManager
Class中:
[MBProgressHUD hideHUDForView:appDelegate.navigationController.topViewController.view animated:YES];
这会使项目在一段时间后由于内存问题而崩溃。由于我在项目中使用ARC,而且还使用了MBProgressHUD的ARC版本。
我想念什么吗?
重要问题:
我可以使MBProgressHUD像UIAlertView一样工作吗?(说我的意思是MBProgressHUD的实现独立于UIView -它用于showHUDAddedTo:
表示自身)。
请注意:在上面隐藏MBProgressHUD的代码中,视图可能与显示MBProgressHUD时的视图有所不同。
任何帮助表示赞赏。
您可以将此添加到自己喜欢的类别中:
+ (MBProgressHUD *)showGlobalProgressHUDWithTitle:(NSString *)title {
UIWindow *window = [[[UIApplication sharedApplication] windows] lastObject];
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:window animated:YES];
hud.labelText = title;
return hud;
}
+ (void)dismissGlobalHUD {
UIWindow *window = [[[UIApplication sharedApplication] windows] lastObject];
[MBProgressHUD hideHUDForView:window animated:YES];
}
可以在任何类上调用它。使用这些类便捷方法时,无需对HUD保持强烈引用。
根据您的具体情况,您可能还想处理在隐藏另一个请求之前的请求。当有新产品出现时,您可以让食客隐藏以前的习惯,或者提出某种排队等等。
在显示新HUD实例之前将其隐藏起来非常简单。
+ (MBProgressHUD *)showGlobalProgressHUDWithTitle:(NSString *)title {
UIWindow *window = [[[UIApplication sharedApplication] windows] lastObject];
[MBProgressHUD hideAllHUDsForView:window animated:YES];
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:window animated:YES];
hud.labelText = title;
return hud;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句