Не могу уволить UIAlertView, кнопки не кликабельны
У меня есть следующий код, где я показываю представление MBProgress, а затем выполняю код в отдельном потоке. Затем я получаю ручку к основному потоку и отклоняю прядильщик, который работает, а затем показываю UIAlertView. UIAlertView загружается нормально, однако я не могу нажать ни на одну из кнопок. Если вид оповещения находится за пределами диспетчерского блока, он работает нормально. Есть идеи?
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
// Do something...
GamePlayManager *gameManager = [GamePlayManager alloc];
Session *sess = [Session sharedInstance];
//Add the last actor to the end of the list
NSMutableDictionary *connections = sess.connections;
[connections setObject:sess.secondActor forKey:[NSString stringWithFormat:@"%d",kLastFieldtag]];
BOOL result = [gameManager areAnswersCorrect:sess.connections startingActor:sess.firstActor endingActor:sess.secondActor];
NSString *display = @"Sorry incorrect. Please recheck your answers.";
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Result"
message:display
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
if (result)
{
display = @"You are correct! You Won!";
if (sess.isMutiplayerGame)
{
[_gameCenterController endGame];
[self showGameOverScreen:YES isMultiplayer:YES];
}
else
{
[self showGameOverScreen:YES isMultiplayer:NO];
}
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
[alert show];
});
}
else
{
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
[alert show];
});
}
});
2 ответа:
Это, вероятно, проблема, вызванная конфликтом между анимацией
MBProgressHUD
и анимациейUIAlertView
.Я никогда не использовал
MBProgressHUD
, но, глядя на код на GitHub, кажется, что они уже решили вашу проблему.MBProgressHUD
обладает свойствомcompletionBlock
.Такой код должен работать: (предупреждение: непроверенный )
dispatch_async(dispatch_get_main_queue(), ^{ [MBProgressHUD HUDForView:self.view].completionBlock = ^{ [alert show]; }; [MBProgressHUD hideHUDForView:self.view animated:YES]; });
MBProgressHUD
запускает егоcompletionBlock
после того, как вид закончил свою анимацию, так что больше не должно быть конфликта.В качестве побочного примечания
MBProgressHUD
метод:- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue completionBlock:(MBProgressHUDCompletionBlock)completion;
Похоже, что он лучше подходит для вашего кода.