2011-04-04 96 views
12

我有一個NSMutableArray顯示在UITableView,我在那裏添加了一些元素。如何在uitableview中添加搜索欄?

例如,元素名稱分別是First,FirstTwo,Second,SecondTwo,Third,ThirdTwo。

現在我想在屏幕上添加一個搜索欄。在那個搜索欄中,當我輸入F時,表格應該只顯示First和FirstTwo。

我該怎麼做?

+0

您可以改爲使用UISearchController。 https://www.raywenderlich.com/113772/uisearchcontroller-tutorial – PrafulD 2016-07-15 13:31:27

回答

17

最好的方法來得到這一點是通過遵循教程 over here over here。 你正在尋找的部件,是這樣的:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [tableData removeAllObjects];// remove all data that belongs to previous search 
    if([searchText isEqualToString:@""]searchText==nil){ 
     [myTableView reloadData]; 
     return; 
    } 

    NSInteger counter = 0; 
    for(NSString *name in dataSource) 
    { 
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
     NSRange r = [name rangeOfString:searchText]; 
     if(r.location != NSNotFound) 
     { 
     if(r.location== 0)//that is we are checking only the start of the names. 
     { 
      [tableData addObject:name]; 
     } 
     } 

     counter++; 
     [pool release]; 

    } 

    [myTableView reloadData]; 
} 
+12

+1因爲您的鏈接已經死亡而離開代碼。 – 2012-06-21 13:46:20

+1

添加了新鏈接。 – Joetjah 2013-04-10 07:11:07

+0

我想從webservice獲取數據。我可以使用相同的代碼嗎?感謝您的鏈接。 – 2013-06-08 08:28:39

27
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 

searchBar.delegate = self; 

self.tableView.tableHeaderView = searchBar; 
0

我做到了我自己,它是工作的精絕。

聲明兩個可變數組。一個包含所有數據,另一個存儲過濾的數據。這裏的searchuser是搜索欄插座。 aray是存儲所有數據的主要數組。將searchbar的大寫屬性設置爲句子,以便這可以正常工作。

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [searchuser.text lowercaseString]); 
    filteredarray=[[NSMutableArray alloc]init]; 
    int l=(int)[searchuser.text length]; 
    if (l>0) 
    { 
     NSMutableString * data=[[NSMutableString alloc]init]; 
     int a=(int)[aray count]; 

     for (int i=0;i<=a-1;i++) 
     { 
      data=[aray objectAtIndex:i]; 
      if ([searchuser.text isEqualToString:data]) 
      { 
       [filteredarray addObject:data]; 
      } 
      if ([data length]>l) 
      { 
       NSMutableString * string=[[NSMutableString alloc]initWithString:[data substringWithRange:NSMakeRange(0, l)]]; 

       if ([searchuser.text isEqualToString:string]) 
       { 
        [filteredarray addObject:data]; 

       } 
      } 
     } 
    } 
    else 
    { 
     filteredarray=aray; 
    } 
    [tableview reloadData]; 
} 
1

如果您使用的是搜索欄。那麼您可以使用搜索欄的代理方法搜索您的表格視圖的包含

(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
// myArray is main array for Table View 
// tempMainArray which store myArray Data 

myArray = [[NSMutableArray alloc]initWithArray:tempMainArray]; 
NSMutableArray *searchArray = [[NSMutableArray alloc]init]; 


[searchArray removeAllObjects];// remove all data that belongs to previous search 
if([searchText isEqualToString:@""]|| searchText==nil){ 

    [myArray removeAllObjects]; 
    myArray = tempMainArray; 
    [_objTableView reloadData]; 

    return; 
} 

NSInteger counter = 0; 
for(NSString *name in myArray) 
{ 

    NSRange r = [name rangeOfString:searchText]; 
    if(r.location != NSNotFound) 
    { 
     if(r.location== 0)//that is we are checking only the start of the names dynamicaly. 
     { 
      [searchArray addObject:name]; 
     } 
    } 

    counter++; 


} 

if (searchArray.count > 0) { 

    [myArray removeAllObjects]; 
    myArray = searchArray; 
    [_objTableView reloadData]; 
} 
else 
{ 
    [myArray removeAllObjects]; 
    myArray = tempMainArray; 
    [_objTableView reloadData]; 
} 

}