我有一个搜索栏,可以搜索数组,并使用结果更新UITableView。表格视图是一本书的列表,其中包含书名和作者:
现在,搜索栏仅搜索标题,但我也想使其搜索作者。这是我的搜索代码(是从http://blog.webscale.co.in/?p=228获得的)。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
[tableData removeAllObjects];// remove all data that belongs to previous search
if([searchText isEqualToString:@""]||searchText==nil){
[tableView reloadData];
return;
}
for(NSString *name in dataSource){
NSInteger counter = 0;
//NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSRange r = [[name lowercaseString] rangeOfString:[searchText lowercaseString]];
if(r.location != NSNotFound)
[tableData addObject:name];
counter++;
}
//[pool release];
[tableView reloadData];
}
dataSource是包含标题的NSMutable Array。包含作者的数组称为“作者”。 “tableData”是一个数组,用于存储应该出现在屏幕上的单元格(包含要搜索的术语的单元格)。
非常感谢,
路加
最佳答案
我将通过使用键值对创建NSDictionary来修改dataSource数组以包含标题和作者(最好使用Book类)。
//Do this for each book
NSDictionary * book = NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
title, @"TITLE", author, @"AUTHOR", nil];
[dataSource addObject:book];
之后,您可以更改搜索方法以改为使用NSDictionary。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
[tableData removeAllObjects];
if(searchText != nil && ![searchText isEqualToString:@""]){
for(NSDictionary * book in dataSource){
NSString * title = [book objectForKey:@"TITLE"];
NSString * author = [book objectForKey:@"AUTHOR"];
NSRange titleRange = [[title lowercaseString] rangeOfString:[searchText lowercaseString]];
NSRange authorRange = [[author lowercaseString] rangeOfString:[searchText lowercaseString]];
if(titleRange.location != NSNotFound || authorRange.location != NSNotFound)
[tableData addObject:book];
}
}
[tableView reloadData];
}
请注意,使用此方法时,您需要更改cellForRowAtIndexPath方法以使用NSDictionary而不是标题字符串。
关于objective-c - UISearchBar搜索两个数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9300362/