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..."];

Вы пробовали с:

[HUD setNeedsLayout];
[HUD setNeedsDisplay];
Другие вопросы по тегам