2

在我的应用程序中UINavigationControllerUITabBar 当我显示 HUD 时,整个屏幕都被锁定,除了TabBar. 所以解除我的HUD的唯一方法是点击一个标签。当我点击我的“后退”按钮时,我也想关闭它NavigationController 这是我的代码:

hud = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.navigationController.view addSubview:hud];
hud.delegate = self;
hud.labelText = @"Loading...";
[hud show:YES];
4

3 回答 3

4

您正在将 hud 视图添加到导航控制器 - 这就是您无法与导航栏交互的原因。

您想要实现的是锁定self.navigationController.topViewController.view在您的情况下可以通过self.view.

尝试以下操作:

hud = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:hud];

让我们知道以上是否对您有用。如果没有,我会改进答案以找到解决方案。

于 2012-08-27T09:40:23.213 回答
1

Hud 将使 userIntrection 禁用...因此用户无法触摸添加 hud 的区域...所以只需将 hud 添加到您想要添加它的位置...但请确保当 HUD 时没有任何 UI 更改Running ,因为 HUD 在辅助线程上运行并且辅助线程上的更改会使您的应用程序崩溃....

    HUD = [[MBProgressHUD alloc] initWithView:self.view];
    HUD.graceTime = .1;
    HUD.labelFont  = [UIFont fontWithName:@"Arial" size:16];
    HUD.labelText = @"Loading..";
    HUD.delegate = self;
    [self.view addSubview:HUD];
    [HUD showWhileExecuting:@selector(loginJsonParsing) onTarget:self withObject:nil animated:YES];
于 2012-08-27T09:52:12.400 回答
0

当用户单击导航栏中的后退按钮而 HUD 仍在后台 BOOM 应用程序迷恋中工作时,我曾经将此视为错误,我设法用更短的代码中接受的答案解决了这个问题。这取决于您想要 HUD 的自定义程度。我使用默认的。

显示:

[MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];

隐藏:

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
   dispatch_async(dispatch_get_main_queue(), ^{
       [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES];
   });
});
于 2013-10-29T08:09:32.753 回答