Подтвердить что ты не робот

MBProgressHUD не может покрывать клавиатуру

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

4b9b3361

Ответ 1

Добавьте hud во второе окно, которое содержит клавиатуру. При показе клавиатуры в приложении есть два экземпляра UIWindow. Первый - это обычное окно, второе - временное окно клавиатуры. Код:

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

Протестировано в ios4.3 и ios5.x, оно действительно работает.

Ответ 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;
[email protected]"Sending...";
[tempKeyboardWindow addSubview:hud];
[hud show:YES];