UITableView Проблема с загрузкой данных и отображением HUD - PullRequest
0 голосов
/ 07 июня 2011

У меня есть UITableView с контроллером навигации . Табличное представление состоит из пользовательских ячеек, каждая из которых содержит данные, которые загружаются с сервера, очевидно, что эта загрузка занимает много времени, и поэтому я хотел бы показать HUD своего рода, пока это происходит.

Моя проблема в том, что, когда я нажимаю кнопку для перехода к представлению таблицы, нажимаемая кнопка застревает в «подсвеченном» состоянии до тех пор, пока все данные не будут загружены, а затем представление переходит от предыдущего к отображаемому. вид таблицы во всей красе. Тем не менее, я бы предпочел перейти к пустому представлению таблицы, а затем показать загрузочный HUD, пока таблица заполнена. (Или что-то подобное, что-либо, показывающее пользователю, что программа на самом деле что-то делает и не дает сбоя ..)

Вот мой код:

- (void) displayView:(int)intNewView{

    NSLog(@"%i", intNewView);
    [currentView.view removeFromSuperview];
    [currentView release];

    switch (intNewView) {
        case 1:
            currentView = [[View1 alloc] init];
            break;
        case 2:
            currentView = [[View2 alloc] init];
            break;
        case 3:
            currentView = [[View3 alloc] init];
            break;
        case 4:
            currentView = [[View4 alloc] init];
            break;
        case 5:
            vc = [[TableViewController alloc] init];
            currentView = [[UINavigationController alloc] initWithRootViewController:vc];
            [currentView setTitle:@"Events"];
            break;
    }

    [UIView beginAnimations:nil context:nil];

    [UIView setAnimationDuration:0.5];

    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft  forView:self.view cache:YES];


    [self.view addSubview:currentView.view];

    [UIView commitAnimations];

}




 - (void)viewDidLoad {
    [super viewDidLoad];
    //Initialisation code..

[SVProgressHUD showInView:self.view status:@"Doing Stuff"];

    [self viewDidAppear:YES];
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    NSLog(@"ViewDidAppear");

    if ([stories count] == 0) {
        NSString * path = @"http://myURL.com";

        [self parseXMLFileAtURL:path];
    }


}

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

Любая помощь будет принята с благодарностью,

Jack

1 Ответ

2 голосов
/ 07 июня 2011

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

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

Если вам нужно больше подробностей, пожалуйста, спросите.

...