2012-07-02 95 views
1

我在用戶界面中添加了一個搜索欄。 Searchbar已經設置好了,可以工作,但我無法弄清楚如何在UITableView中搜索內容。我可以只刪除不以搜索欄中輸入的字符開頭的項目嗎?使用UISearchBar搜索TableView

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
if (searchBar.text.length < 1) { 
    return; 
} 
else { 
    // Do search stuff here 



}} 

該代碼工作,調用else函數。但我不知道該怎麼做。我不想爲此創建一個全新的數組。

回答

3

我會爲你做一個更好的。這個例子將搜索用戶類型。如果您的數據非常龐大,您可能需要按照原計劃在- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar中執行。不幸的是,你需要第二個數組,但它很容易圍繞它的代碼表:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 
    if(searchText.length == 0) 
    { 
     isFiltered = FALSE; 
    } 
    else 
    { 

     isFiltered = true; 
     if (filteredTableData == nil) 
      filteredTableData = [[NSMutableArray alloc] init]; 
     else 
      [filteredTableData removeAllObjects]; 

     for (NSString* string in self.masterSiteList) 
     { 
      NSRange nameRange = [string rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]; 
      if(nameRange.location != NSNotFound) 
      { 
       [filteredTableData addObject:string]; 
      } 
     } 
    } 
    [self.tableView reloadData]; 
} 

然後更新您的委託方法來顯示filteredTableData陣列,而不是規則排列的數據時,isFiltered變量被設置到YES。

+0

我加入boolen isFilterd,並添加這樣的:如果(!isFiltered =否){ 的NSArray * filteredTableData = [[NSMutableArray裏的alloc] INIT]; cell.textLabel.text = [filteredTableData objectAtIndex:indexPath.row]; } 否則如果(isFiltered = YES!){ \t \t cell.textLabel.text = [self.itemArray objectAtIndex:indexPath.row]; } \t return cell; } ...但它並沒有真正的工作 – Alessandro

+0

經過一些調整,它終於工作了! – Alessandro

+0

是的。 「調整」部分是示例代碼最難的部分。大聲笑 – CodaFi