MBprogressHUD没有按预期显示

时间:2013-06-06 09:28:04

标签: ios objective-c ios5 mbprogresshud

我正在使用MBProgressHUD来显示HUD,但它没有按预期显示。

步骤: 用户选择tableView中的单元格。解析一些数据然后向用户显示警告(UIAlertView)。询问用户是否要与所选(单元)用户一起创建新游戏。取消/开始游戏按钮。

UIAlertView委托方法如下:

pragma mark - UIAlertView Delegate

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    NSLog(@"button %i",buttonIndex);
    if (buttonIndex == 0) {
        // Cancel button pressed
        self.gameNewOpponentuser = nil;
    } else {
        // Start Game button pressed
        [MESGameModel createNewGameWithUser:[PFUser currentUser] against:self.gameNewOpponentuser];
    }
}

如果用户选择“开始游戏”,则运行GameModel方法。游戏模型(NSObject子类)方法如下:

pragma mark - 自定义方法

+(void)createNewGameWithUser:(PFUser *)user1 against:(PFUser *)user2 {
    // First we put a HUD up for the user on the window
    MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithWindow:[UIApplication sharedApplication].keyWindow];
    HUD.dimBackground = YES;
    HUD.labelText = NSLocalizedString(@"HUDCreateNewGame", @"HUD - Create New Game text");
    HUD.removeFromSuperViewOnHide = YES;

    // Confirm we have two users to play with.

}

正如您所看到的,HUD是将alloc init分配给应用程序的keywindow。然而,HUD没有按预期显示,没有任何事情没有发生UI锁定等。我在上面的方法中放了一个断点,可以看到它被调用但是没有显示HUD

从上面开始,我预计HUD会出现,但没有其他事情发生,即HUD现在只是停留在屏幕上......

5 个答案:

答案 0 :(得分:5)

您缺少将HUD添加到Window然后显示HUD的部分。请注意,您可以将HUD添加到Window或当前视图(self.view)。

MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithWindow:[UIApplication sharedApplication].keyWindow];
[[UIApplication sharedApplication].keyWindow addSubview:HUD]; //<-- You're missing this

HUD.dimBackground = YES;
HUD.labelText = NSLocalizedString(@"HUDCreateNewGame", @"HUD - Create New Game text");
HUD.removeFromSuperViewOnHide = YES;

[HUD showAnimated:YES whileExecutingBlock:^{ //<-- And this
  // Do something
}];

答案 1 :(得分:0)

试试这个:

MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithView:self.view];
HUD.labelText = NSLocalizedString(@"HUDCreateNewGame", @"HUD - Create New Game text");
// Set determinate mode
[HUD setMode:MBProgressHUDModeDeterminate];
[self.view addSubview:HUD];
[HUD show:YES];

答案 2 :(得分:0)

您不会将其添加到任何视图以显示它。所以将它添加到适当的视图中。

来自MBProgressHUD的git hub项目演示

// The hud will dispable all input on the view (use the higest view possible in the view hierarchy)
    HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
    [self.navigationController.view addSubview:HUD];

答案 3 :(得分:0)

您没有获得显示hud的代码。使用以下代码

 MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
 HUD.dimBackground = YES;
 HUD.labelText = NSLocalizedString(@"HUDCreateNewGame", @"HUD - Create New Game text");

答案 4 :(得分:0)

好的,我发现了这个问题。我正在使用clickedButtonAtIndex方法来处理UIAlertView,这当然是对视图持有的。我使用了didDismissWithButtonIndex,现在效果很好。