2011-05-31 67 views
9

我試圖在空的時候在我的tableview上顯示沒有結果消息。我已經完成了uilabel方法,當它是空的時候出現,但它似乎不是蘋果在聯繫人等中如何嘗試上下滾動以顯示「無結果」。我只在一個地方呆在那裏。沒有結果 - UITableView iPhone

有誰知道如何做到這一點?

我認爲他們添加了一個沒有結果的單元格?

回答

10

是的。如果你沒有要顯示的結果,請執行下列操作

  1. 創建一個名爲noResultsToDisplay,還是其他什麼東西一個布爾標誌。
  2. 如果您沒有顯示結果,請設置noResultsToDisplay = YES,否則將其設置爲NO
  3. numberOfRowsInSectionif (noResultsToDisplay) return 3;
  4. 的cellForRowAtIndexPathif (noResultsToDisplay && indexPath.row == 2) cell.textLabel.text = @"No Results";
+0

我會把2.在viewDidLoad?謝謝。 – 2011-05-31 09:12:54

+0

@ K.Honda,對不起,我編輯了我的答案。 – EmptyStack 2011-05-31 09:15:42

+0

嗨西蒙,當我把2放入_cellForRowAtIndexPath_,我會得到2個未聲明的標識符錯誤_noResultsToDisplay_和_numberOfRowsInSection_。你知道爲什麼嗎?謝謝。 – 2011-05-31 09:26:25

0

這樣做的兩種方法:既可以按照你自己的建議做一個「無結果單元格」,並在你的tableViewController中有一個狀態爲BOOL resultIsEmpty = YES。在cellForRowAtIndexPath中,你首先測試這個空的BOOL並且只返回無結果單元格,記得也要檢查numberOfRowsInSection,這樣你可以在空的情況下返回1(否則它可能會返回你的模型數組的長度,當然這是0)。

另一種方法是在表格視圖中插入一個y並在其中放置標籤。這可以做到,因爲UITableView是UIScrollView的子類。

self.tableView.contentInset = UIEdgeInsetsMake(heighOfNoResultLabel, 0, 0, 0); 

然後在「resultsDidLoad」或你的新的數據委託調用,你測試是否是0和插圖的的tableView並放置一個標籤那裏。如果不是0,則將插入設置爲

self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0); 

全部爲0。您可以爲此屬性設置動畫,以便在沒有結果時,tableview「向下滾動」以顯示「無結果」標籤。

Bot解決方案是有效的我會說,大約相同數量的代碼。之後的差異可能是你可以用它做什麼。

3
#pragma mark - 
#pragma mark Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    // Return the number of sections. 
    return 1; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    // Return the number of rows in the section. 
    return 3; 
} 


// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell... 

    if (indexPath.row == 2) { 
     cell.textLabel.text = @"Empty cell"; 
    } 

    return cell; 
} 
0

我已經通過保持與同farme標籤視圖表已經解決了這一點,並打「隱藏「標籤和表格的屬性(總是一個是YES,另一個是NO)。

0
i have edited the accepted answer to be look like the no search results in tableView 


    Create a boolean flag named noResultsToDisplay, or something else. 
    1-If you have no results to display then set noResultsToDisplay = YES, set it to NO otherwise. 
    2-(this step changed)In numberOfRowsInSection, if (noResultsToDisplay) return 1; 
// 1 returned not 3 

    3-(this step changed) In cellForRowAtIndexPath, 

static NSString *CellIdentifier; 
    if (noResultsToDisplay){ 
     CellIdentifier = @"Cell"; 
// in my case i use custom cell this step can be skipped if you use the default UITableViewCell 
    } 
    else{ 
     CellIdentifier = @"DocInqueryCell"; 
    } 
DocumentationInqueryCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

// don't forgt to add cell in your storyboard with identifier Cell and class your custom class , again this step can be skipped if you use the default cell 

then 
if (noResultsToDisplay) { 
cell.textLabel.text = @"No Results"; 
}else{ 

do what you want in your custom cell 

}