我正在使用MBProgressHUD
来显示HUD,但它没有按预期显示。
步骤:
用户选择tableView
中的单元格。解析一些数据然后向用户显示警告(UIAlertView
)。询问用户是否要与所选(单元)用户一起创建新游戏。取消/开始游戏按钮。
UIAlertView
委托方法如下:
-(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
子类)方法如下:
+(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现在只是停留在屏幕上......
答案 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
,现在效果很好。