搜索栏上的取消按钮未正确取消

时间:2011-11-11 02:27:50

标签: objective-c

我有一个搜索栏,我现在可以搜索,但是当我输入要搜索的文本时,单击取消按钮。它没有让我回到我的第一阶段,意味着表中的项目已经完整。

例如:我用单词搜索项目: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];
}

1 个答案:

答案 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