MBProgressHUD не может покрыть клавиатуру - PullRequest
12 голосов
/ 18 октября 2011

Когда я пытаюсь показать 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 отображается передокно делегата, клавиатура тоже показывает, так что добавил последний, который находится спереди.Я не прав?

Ответы [ 2 ]

17 голосов
/ 29 мая 2012

Добавьте 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, оно действительно работает.

2 голосов
/ 26 октября 2015

для 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];
...