12

当我尝试在显示键盘的同时显示 MBProgressHUD 时,我使用下面的代码,但 HUD 对象无法覆盖键盘:

SNSSharerAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
HUD = [[MBProgressHUD showHUDAddedTo:delegate.window animated:YES] retain];
HUD.mode = MBProgressHUDModeIndeterminate;
HUD.labelText = @"Posting...";
[HUD show:YES];

我以为HUD对象显示在delegate的窗口前面,键盘也显示,所以最后添加的,是前面。我错了吗?

4

2 回答 2

17

将 hud 添加到包含键盘的第二个窗口。当键盘显示时,应用程序中有两个 UIWindow 实例。第一个是常规窗口,第二个是临时键盘窗口。代码:

UIWindow *tempKeyboardWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
MBProgressHUD *hud=[[MBProgressHUD alloc] initWithWindow:tempKeyboardWindow];
hub.mode=MBProgressHUDModeIndeterminate;
hub.labelText=@"Sending...";
[tempKeyboardWindow addSubview:hud];
[hud show:YES];

在ios4.3和ios5.x中测试,确实有效。

于 2012-05-29T06:21:56.707 回答
2

对于 ios 9 [[[UIApplication sharedApplication] windows] objectAtIndex:1] 尝试使用 [[[UIApplication sharedApplication] windows] lastObject]

所以会是这样

UIWindow *tempKeyboardWindow = [[[UIApplication sharedApplication] windows] lastObject];
MBProgressHUD *hud=[[MBProgressHUD alloc] initWithWindow:tempKeyboardWindow];
hub.mode=MBProgressHUDModeIndeterminate;
hub.labelText=@"Sending...";
[tempKeyboardWindow addSubview:hud];
[hud show:YES];
于 2015-10-25T23:50:57.517 回答