2013-08-01 91 views
0

我有一個tableview用於顯示從Web服務加載的數據。有時它加載速度很快,有時需要一段時間。加載時,tableview只顯示一個空白屏幕(在我的情況下,它是一個灰色的屏幕)。我想在桌面視圖背景視圖中顯示一個簡單的圖片,其中顯示加載並有一個加載圖標,我將動畫旋轉,但我無法完全顯示它。這裏是我的代碼:iOS將圖像添加到Tableview背景視圖

UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.bounds.size.height)]; 
[backgroundView setBackgroundColor:[UIColor colorWithRed:227.0/255.0 green:227.0/255.0 blue:227.0/255.0 alpha:1.0]]; 

self.tableLoading.image = [UIImage imageNamed:@"loading.png"]; 
self.tableLoading.frame = CGRectMake(145, 80, 30, 30); 
[backgroundView addSubview:self.tableLoading]; 

[self.feedTableView setBackgroundView:backgroundView]; 

背景視圖顯示爲預期的,因此,灰色的背景,但我不能讓圖像顯示在所有。

有什麼建議嗎?這似乎是一個簡單的問題,但我已經花了很長時間沒有成功。提前致謝!

+0

我不認爲展示一個後臺加載是一個實現代碼如下良好的用戶體驗,當內容是在前面。該圖像多長時間加載一次。也許隱藏桌面視圖直到圖像準備好了? –

+0

這個想法是隻顯示加載時沒有數據的表視圖。最好隱藏tableview,直到數據加載並將我的圖像添加到常規視圖並對其進行動畫處理。我非常特別需要一個簡單的自定義活動指示器,它只是在等待數據時旋轉圖像,然後在數據加載時消失。這隻會在從我的菜單加載視圖控制器時發生。 –

回答

0

您可以避免使用您的UIView,而是可以使用活動指示器。 嘗試是這樣的:

-(void)viewDidLoad{ 
    UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.bounds.size.height)]; 
    backgroundView.tag=1; 
    [backgroundView setBackgroundColor:[UIColor colorWithRed:227.0/255.0 green:227.0/255.0 blue:227.0/255.0 alpha:1.0]]; 

    self.tableLoading.image = [UIImage imageNamed:@"loading.png"]; 
    self.tableLoading.frame = CGRectMake(145, 80, 30, 30); 

    [backgroundView addSubview:self.tableLoading]; 
    [self.view addSubview:backgroundView]; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // Do your web service call asynchronous 
     dispatch_sync(dispatch_get_main_queue(), ^{ 
      //All UI needs to be here, in this thread 
      // remove from superview your loading image to show your tableview content 
      for (UIView *subview in [self.view subviews]) { 
       if (subview.tag == 1) { 
        [subview removeFromSuperview]; 
       } 
      } 
      [self.yourTableView reloadData]; 
     }); 
    }); 
} 
+0

這就是我最初開始的,但我想有我自己的自定義活動指標,使用一個簡單的圖像。 –

+0

@KyleBegeman看我的編輯 –

+1

工作就像一個魅力!非常感謝! –

0

你是如何做你的web服務調用?我想這是在一個異步塊上完成的。也許像AFNetworkingNSOperation塊?如果是這樣,你在哪裏設置圖像作爲背景?所有用戶界面(UI)的東西不應該在後臺線程上完成,它應該在主線程上完成,因爲主線程是唯一應該參與UI的人。

嘗試以下操作:

dispatch_async(dispatch_get_main_queue(), ^{ 

    UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.bounds.size.height)]; 
    [backgroundView setBackgroundColor:[UIColor colorWithRed:227.0/255.0 green:227.0/255.0 blue:227.0/255.0 alpha:1.0]]; 

    self.tableLoading.image = [UIImage imageNamed:@"loading.png"]; 
    self.tableLoading.frame = CGRectMake(145, 80, 30, 30); 
    [backgroundView addSubview:self.tableLoading]; 

    [self.feedTableView setBackgroundView:backgroundView]; 

}); 

可以開始顯示UITableView背景圖片,當你開始請求,只是駁回請求完成網絡之後。

例如,SLRequest有一個名爲performRequestWithHandler:的發送請求方法,它有一個處理程序在請求完成時被調用,在該處理程序中,您可以關閉自定義指示符或將其從視圖控制器中刪除。

希望得到這個幫助。

+0

這實際上是一個使用SLRequest的Twitter調用。我基本上只是想在屏幕中間做一個自定義活動指示器,當沒有tableview數據時,然後當數據加載tableview應該自動掩蓋圖像,然後我可以擺脫它。 –

+0

我更新了我的帖子,請看看。我之前沒有使用過'SLRequest',但我確信這是圍繞網絡的想法。 – Malloc