2011-06-07 45 views
0

我有一個UITableView導航控制器。表格視圖由自定義單元格組成,每個單元格包含從服務器下載的數據,顯然這種下載非常耗時,因此我希望在發生這種情況時顯示某種HUD。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

任何幫助將不勝感激,

傑克

回答

2

我想你應該使整個事情異步。我的意思是,一旦你到達你的桌子,你將它渲染爲空白,爲它分配一個沒有數據的數據源,使HUD出現,然後啓動一個線程來從遠程服務器加載數據。

線程完成任務後,您可以通過您的應用程序發送通知,該應用程序先前已將您的表綁定到該應用程序。所以,當表得到通知線程已完成其任務時,您更新數據源,關閉HUD並重新加載表。

如果您需要更多細節,請詢問。

+0

我明白你的意思,但是當我試圖將表視圖加載HUD,數據將開始從服務器加載,然後當它加載它只是沒有顯示在表中,但平視顯示器去除了它自己,因爲它應該..任何想法我可能做錯了嗎? – 2011-06-07 13:46:21

+0

您是否將數據加載到表的數據源中,然後在線程結束時調用'[self.tableView reloadData]'(或類似的)方法? – marzapower 2011-06-07 13:48:48

+0

我的天,我正在重新加載錯誤的tableView。菜鳥的錯誤,非常感謝@marzapower。 – 2011-06-07 14:06:56