2013-06-06 10 views
0

Я использую MBProgressHUD, чтобы показать HUD, но он не отображается, как ожидалось.MBprogressHUD не отображается, как ожидалось

Шаги: Пользователь выбирает ячейку в tableView. Некоторые данные анализируются, тогда пользователю отображается предупреждение (UIAlertView). Пользователь спрашивает, хотят ли они создать новую игру с выбранным пользователем (ячейкой). Отмена/запуск игровых кнопок.

В 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 подкласс) выглядит следующим образом:

Pragma знак - специальный метод

+(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 инициализации в keywindow приложения. Однако HUD не отображается так, как ожидалось, ничего не происходит без блокировки пользовательского интерфейса и т. Д. Я поставил точку останова в указанном выше методе и вижу, что он называется, однако HUD не отображается.

Из вышеизложенного я ожидаю, HUD, чтобы показать, но ничего не произошло, то есть HUD просто оставаться на экране в данный момент ...

+0

ПРИМЕЧАНИЕ: Отмечено, что нужно удалить или разрешить мне ответить на мой собственный вопрос. ЭТО СЕЙЧАС РЕШЕНО. – StuartM

ответ

0

Хорошо, я нашел проблему. Я использовал метод clickedButtonAtIndex для UIAlertView, который, конечно, держал вид. Вместо этого я использовал didDismissWithButtonIndex, и теперь это отлично работает.

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]; 
+0

Как и выше, я использую модель игры, а не VC, поэтому не могу получить доступ к self.view – StuartM

+0

, который является вашим супер-классом? – manujmv

+0

NSObject как модель – StuartM

0

Вы не добавлять его в любом виде для его отображения , Поэтому добавьте его в соответствующее представление.

Из демоверсии проекта мерзавца хаба для MBProgressHUD

// 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]; 
+0

Я загружаю HUD из модели, поэтому не имею доступа к self.navigationController.view ... – StuartM

+0

Его пример. Вам нужно добавить его к некоторому виду не обязательно навигационного контроллера. –

+0

В моем примере я использую окно как свою модель и не имел бы представления, связанного с ним. Хорошо, я нашел ответ – StuartM

0

Вы не дали код для отображения HUD. используйте следующий код

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

Я не могу использовать self.view Я инициирую его из Model not a View Controller, поэтому не имел бы доступа к self.view – StuartM

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 
}]; 
+0

Спасибо, но это не делает шоу HUD :(предупреждение отключено, метод вызывается только HUD не отображается? – StuartM

+0

Установите это свойство в HUD перед его отображением: 'HUD.minShowTime = 4.0; // в секундах'. Или убедитесь, что вы что-то сделали в' executingBlock' –

+0

[HUD showAnimated: YES whileExecutingBlock:^{// <- И это // Делать что-то }]; нужен ли этот кусок кода? Почему не только [self.view addSubview: HUD]; [HUD show: YES] ;. –

Смежные вопросы