在全球范围内使用MBProgressHUD +使其单例

病毒式的

在我的项目中,每个用户交互事件都会进行网络调用(这是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.";

在隐藏它的同时,从NetworkActivityManagerClass中:

[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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章