MBProgressHUD изменить label.text в connectionDidFinishLoading
Я использую MDProgressHUD для управления процессом загрузки, который использует NSConnection. Все работает отлично. У меня возникла проблема, когда я пытаюсь изменить HUD labelText, чтобы он не говорил "Загрузка до завершения", когда вызывается connectionDidFinishLoading.
В моем методе connectionDidFinishLoading я меняю labelText и меняю значок на галочку, как в примере приложения.
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]];
HUD.mode = MBProgressHUDModeCustomView;
HUD.labelText = @"Finishing Up";
NSLog(@"show change now!!!");
Сразу после этого кода я разархивирую загрузку и выполняю некоторые манипуляции с БД.
Но по какой-то причине он не изменяется до тех пор, пока не будет достигнут конец функции, где [HUD hide:YES afterDelay:4]; называется.
Мне бы хотелось, чтобы оно изменилось до того, как оно начнет разархивировать мое содержимое, поскольку загрузка завершена, и приложение выглядит как зависшее или зависшее.
Я использую zipArchive для извлечения, если это имеет значение.
Любой совет будет принят во внимание.
5 ответов
Для всех, кто вернется к этому, обратите внимание на настройку:
HUD.hidden = YES;
недостаточно для вызова метода делегата. Вы должны на самом деле позвонить:
[HUD hide:YES];
Это сработало для меня
dispatch_async(dispatch_get_main_queue(), ^{
progressView.titleLabelText = @"Downloading ...";
});
MBProgressHUD использует KVO для обнаружения изменений в свойствах, таких как метки, прогресс и т. Д. Как только вы измените его, наблюдайте, что ValueForKeyPath() должен запуститься и обновить пользовательский интерфейс. Есть ли шанс, что ваш код действительно интенсивный и блокирует пользовательский интерфейс? Я видел это раньше...
Вы должны просто добавить этот метод в заголовочный файл MBProgressHud:
+ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view withText:(NSString *)text;
И реализовать его в файле.m следующим образом:
+ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view withText:(NSString *)text
{
MBProgressHUD *hud = [[self alloc] initWithView:view];
hud.labelText = text;
[view addSubview:hud];
[hud show:YES];
return MB_AUTORELEASE(hud);
}
и называйте это где хотите, как:
[MBProgressHUD showHUDAddedTo:self.view withText:@"Loading..."];