2011-04-04 99 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]; 
} 

}