2010-03-22 62 views
7

我有一個用一些數據填充的UITableViewController。如果數據恢復爲空,那麼表格顯然是空的。什麼是適當的方法來處理這種情況下,並提出像「無數據可用」的UILabel。在UITableViewController中處理空的UITableView

我一直在使用- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section,但它被證明有點麻煩,我不再有信心它是做這件事的最好的地方。

回答

1

我只是在沒有數據的情況下隱藏tableview。簡單地繼承UITableView並覆蓋reloadData。您還可以適當地顯示/隱藏文本標籤,以顯示沒有可用的數據。

- (void)reloadData { 
    [super reloadData]; 
    BOOL dataPresent = FALSE; 
    int sections = [self.dataSource respondsToSelector:@selector(numberOfSectionsInTableView:)] ? [self.dataSource numberOfSectionsInTableView:self] : 1; 
    for (int i = 0; i < sections; i++) { 
     if ([self.dataSource tableView:self numberOfRowsInSection:i] > 0) { 
      dataPresent = TRUE; 
      break; 
     } 
    } 
    self.hidden = !dataPresent; 
    return; 
} 
5

我可能會顛倒哲學一點,只顯示內容可用時的UITableView,並讓UIView在內容準備好之前顯示「無內容」可用圖像。

一旦內容已被提取並準備好呈現 - 在'no content'圖像上通過動畫或創建UITableView到視圖層次結構中,並要求它重新加載其數據。這將通過它的數據源代理回調開始工作。

至少這樣你不必擔心顯示一個沒有數據的tableview,並將關注點與UITableViewDataSource回調方法混合在一起。

+0

我喜歡那樣。所以我開始使用基於導航的應用程序,並最終獲得了一個UITableViewController。所以,如果我隱藏tableView,我該如何將視圖添加到視圖中,以及哪些視圖是那裏的underneith?當我打開InterfaceBuilder時,我只能看到tableview。這讓我很困惑。 – Ternary 2010-03-25 04:17:36

1

爲什麼不只是在表格爲空時將UITableView的backgroundView屬性更改爲適當的值?您可以在您爲tableView加載或重載數據的任何時候更新backgroundView屬性。 backgroundView會根據您的tableView的大小自動調整大小,您可以對其進行自定義,使其擁有您想要的空白圖片,文本和控件。