如何在uitableview中添加search栏?

我有一个NSMutableArray显示在UITableView ,我已经添加了一些元素。

例如,元素名称分别是First,FirstTwo,Second,SecondTwo,Third,ThirdTwo。

现在我想在屏幕上添加一个search栏。 在那个search栏中,当我inputF时,表格只应该显示First和FirstTwo。

我应该怎么做?

最好的方法是通过在这里的教程。 你正在寻找的部分是这样的:

 - (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]; } 
  searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; searchBar.delegate = self; self.tableView.tableHeaderView = searchBar; 

如果你正在使用search栏。 那么你可以使用searchbar的委托方法search你的表视图的包含

 (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]; } } 

我自己做了,它工作得很好。

声明两个可变数组。 一个包含所有的数据,另一个存储过滤的数据。 这里的searchuser是search栏sockets。 aray是存储所有数据的主要数组。 将search栏大写属性设置为句子,这样才能正常工作。

 - (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]; }