如何在uitableview中添加搜索栏?
Posted
技术标签:
【中文标题】如何在uitableview中添加搜索栏?【英文标题】:how to add searchbar in uitableview? 【发布时间】:2011-04-04 12:21:08 【问题描述】:我有一个NSMutableArray
显示在UITableView
中,我在那里添加了一些元素。
例如,元素名称为 First、FirstTwo、Second、SecondTwo、Third、ThirdTwo。
现在我想在屏幕上添加一个搜索栏。当我在那个搜索栏中输入 F 时,表格应该只显示 First 和 FirstTwo。
我应该怎么做?
【问题讨论】:
你可以使用 UISearchController 代替。 raywenderlich.com/113772/uisearchcontroller-tutorial 【参考方案1】: searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
searchBar.delegate = self;
self.tableView.tableHeaderView = searchBar;
【讨论】:
【参考方案2】:掌握这个窍门的最佳方法是遵循教程 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];
【讨论】:
我想要来自网络服务的数据。我可以使用相同的代码吗?感谢您的链接。【参考方案3】:如果您使用的是搜索栏。然后您可以使用搜索栏的委托方法搜索您的表格视图的包含
(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];
【讨论】:
【参考方案4】:我自己做的,效果很好。
声明两个可变数组。一个包含所有数据,第二个用于存储过滤后的数据。这里 searchuser 是搜索栏出口。 aray 是存储所有数据的主数组。将搜索栏的大写属性设置为句子,这样它就可以正常工作。
- (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];
【讨论】:
以上是关于如何在uitableview中添加搜索栏?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UITableview 的标题中向 UISearchBar 添加按钮?
如何在 UISplitViewController 的导航栏下方添加搜索栏?