MBProgressHUD блокирует взаимодействие пользователя с табличным представлением

У меня есть uitableview, который загружает данные из Интернета, и в этот период я ​​отображаю MBProgressHUD. Но проблема в том, что пользователь не может ничего коснуться, включая кнопку предыдущей страницы, до загрузки таблицы. Вот мой код в двух разных классах:

//PROBLEM METHOD 1
- (void)viewDidLoad
{
    [super viewDidLoad];
    [tableEtkinlikler reloadData];
    MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    HUD.labelText = @"Açılıyor...";
    HUD.userInteractionEnabled = NO;

    [self performSelector:@selector(loadEtkinliklerTitlesAndImages) withObject:nil afterDelay:0];

    tableEtkinlikler.dataSource = self;
    tableEtkinlikler.delegate = self;
}

У меня такая же проблема с кнопкой. В ней я загружаю данные из Интернета..

//PROBLEM METHOD 2
- (IBAction)AktivitelerButtonClicked:(UIButton *)sender
{
    MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    HUD.labelText = @"Açılıyor...";
    HUD.userInteractionEnabled = NO;
    [self performSelector:@selector(openAktivitelerWindow) withObject:nil afterDelay:0]; 
}

person birdcage    schedule 30.01.2013    source источник


Ответы (1)


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

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

в вашем коде это HUD.userInteractionEnabled = NO; должно работать, но проблема может заключаться в том, что showHUDAddedTo:self.view вы не используете максимально возможное представление в иерархии представлений.

Попробуйте использовать это:

- (IBAction)showSimple:(id)sender {
    // 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];
    HUD.userInteractionEnabled = NO;
    // Regiser for HUD callbacks so we can remove it from the window at the right time
    HUD.delegate = self;

    // Show the HUD while the provided method executes in a new thread
    [HUD showWhileExecuting:@selector(loadEtkinliklerTitlesAndImages) onTarget:self withObject:nil animated:YES];
}
person u.gen    schedule 30.01.2013
comment
сработало отлично, спасибо .. я только что удалил навигационный контроллер, поэтому код такой: MBProgressHUD * HUD = [[MBProgressHUD alloc] initWithView:self.view]; [self.view addSubview:HUD]; HUD.userInteractionEnabled = НЕТ; HUD.labelText = @Açılıyor...; [HUD showWhileExecuting:@selector(loadAktivitelerImages) onTarget:self withObject:nil анимированный:YES]; - person birdcage; 30.01.2013
comment
отлично, также убедитесь, что вы Hide или dismiss используете HUD, когда пользователь взаимодействует с чем-либо в вашем представлении. - person u.gen; 30.01.2013