我有一个搜索栏,我现在可以搜索,但是当我输入要搜索的文本时,单击取消按钮。它没有让我回到我的第一阶段,意味着表中的项目已经完整。
例如:我用单词搜索项目:a,它给了我所有的项目,是的,它现在是,但是当我点击取消按钮时,我希望程序给我所有项目存在,而不是只是一个项目。
这是代码:请帮帮我。非常感谢你。
- (void)searchBarCancelButtonClicked:(UISearchBar *)aSearchBar
{
searchBar.text = @"";
[searchBar resignFirstResponder];
letUserSelectRow = YES;
searching = NO;
self.tableView.scrollEnabled = YES;
NSLog(@"what text after cancel now: %@", searchBar.text);
[self.tableView reloadData];
}
- (NSMutableArray *) searchTableView {
NSString *searchText = searchBar.text;
NSLog(@"search text: %@", searchText);
NSMutableArray *resultArray = [[NSMutableArray alloc] init];
NSMutableArray *tempArr = [[NSMutableArray alloc] init];
for (NSDictionary *dTemp in arrayData)
{
NSString *tempStr = [dTemp objectForKey:@"url"];
NSLog(@"sTemp string: %@",[ NSString stringWithFormat:@"%@", tempStr]);
NSRange titleResultsRange = [tempStr rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0)
{
NSLog(@"1 count :%d", [resultArray count]);
[resultArray addObject:dTemp];
NSLog(@"2 count :%d", [resultArray count]);
[tempArr addObject:resultArray];
[resultArray release];
resultArray = [NSMutableArray new];
}
}
if (resultArray != nil) {
[resultArray release];
}
return tempArr;
}
- (void)searchBar:(UISearchBar *)aSearchBar textDidChange:(NSString *)searchText
{
NSLog(@"what text after cancel now: %@", searchBar.text);
if([searchText length] > 0) {
[sortedArray removeAllObjects];
searching = YES;
letUserSelectRow = YES;
self.tableView.scrollEnabled = YES;
NSMutableArray *searchArray = [self searchTableView];
sortedArray = [[NSMutableArray alloc] initWithArray:searchArray copyItems:YES];
for (int i = 0; i<[sortedArray count]; i++) {
NSLog(@"this is the search array: %@", [[sortedArray objectAtIndex:i] class]);
}
NSLog(@"sorted array: %d", [sortedArray count]);
}
else {
searching = NO;
letUserSelectRow = NO;
self.tableView.scrollEnabled = NO;
}
[self.tableView reloadData];
}
答案 0 :(得分:0)
您无需覆盖任何UISearchBar方法即可完成此操作。这样做的新方法依赖于UISearchDisplay控制器(特别是shouldReloadTableForSearchString
)。
声明您的视图控制器符合UISearchDisplayDelegate
协议,并保留两个实例变量:您的模型为NSArray
(所有数据),过滤后的数组为NSMutableArray
(您的子集)数据)。您目前在“searchTableView”中拥有的代码将过滤模型的内容并将其放入过滤的NSMutableArray
中。然后,您将覆盖以下UITableView
方法:-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
和-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
。在每个返回之前,进行比较以确定您的tableView
参数是否等于self.searchDisplayController.searchResultsTableView
。如果是,用户正在查看已过滤的列表,您应该使用已过滤的NSMutableArray
的内容来创建视图,否则,用户正在查看整个数据集,您应该使用该内容保存模型的NSArray
。看一下下面的Apple代码,看一下我所描述的简单例子:
http://developer.apple.com/library/ios/#samplecode/TableSearch/Introduction/Intro.html