0

我的搜索栏在控制台中工作,但在模拟器中不起作用,我不知道为什么。我尝试了很多代码,但没有任何效果。我正在我的 tableview 中寻找餐厅名称,但是当我输入什么都没有发生时,模拟器中的一切都保持不变。

这是我的代码:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
    if([searchText length] == 0){
        [jsonObject2 removeAllObjects];
        [jsonObject2 addObjectsFromArray:jsonObject];
    }else{
        [jsonObject2 removeAllObjects];

        for(NSDictionary *dictionary in jsonObject)
        {
            NSObject *ob = [dictionary objectForKey:@"nombres"];
            if([ob isKindOfClass: [NSString class]])
            {
                NSString*string=[ob description];
                NSRange range = [string rangeOfString:searchText options:NSCaseInsensitiveSearch];

                if (range.location != NSNotFound) {
                    [jsonObject2 addObject:ob];
                    NSLog(@"%@",jsonObject2);
                }
            }
        }
    }
    [myTableView reloadData];
}

-(void)searchBarSearchButtonClicked:(UISearchBar *)asearchBar{
    [searchBar resignFirstResponder];
}
4

3 回答 3

0

这个问题可能有两个原因

  1. 您正在jsonObject用作表格视图的数据源。如果是这样使用jsonObject2.

  2. 如果第一种情况是错误的,那么您可能应该jsonObject2在添加所有搜索组件之后记录您的日志。并修复它,以防它不将对象串入其中。

于 2013-02-04T05:31:43.530 回答
0

我发现了我的问题,我将此代码添加到搜索 textDidChange 方法:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
if([searchText length] == 0){
    [jsonObject2 removeAllObjects];
    [jsonObject2 addObjectsFromArray:jsonObject];
    //NSLog(@"%@",jsonObject2);
}else{
    [jsonObject2 removeAllObjects];
    for(NSDictionary *dictionary in jsonObject)
    {
        NSString*string=[dictionary objectForKey:@"nombres"];
            NSRange range=[string rangeOfString:searchText options:NSCaseInsensitiveSearch];
            if (range.location != NSNotFound) {
                [jsonObject2 addObject:dictionary];
                NSLog(@"%@",jsonObject2);
        }
    }
}
[myTableView reloadData];  
}
于 2013-02-04T17:00:52.733 回答
0

首先检查UITableViewUISearchBar正确添加?...然后取两个NSMutableArray并将一个数组添加到另一个数组ViewDidLoad,例如,

self.listOfTemArray = [[NSMutableArray alloc] init]; // array no - 1
self.ItemOfMainArray = [[NSMutableArray alloc] initWithObjects:@"YorArrayList", nil]; // array no - 2 

[self.listOfTemArray addObjectsFromArray:self.ItemOfMainArray]; // add 2array to 1 array

并编写以下代码方法

- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText
{
        NSString *name = @"";
        NSString *firstLetter = @"";

    if (self.listOfTemArray.count > 0)
         [self.listOfTemArray removeAllObjects];

        if ([searchText length] > 0)
        {
                for (int i = 0; i < [self.ItemOfMainArray count] ; i = i+1)
                {
                        name = [self.ItemOfMainArray objectAtIndex:i];

                        if (name.length >= searchText.length)
                        {
                                firstLetter = [name substringWithRange:NSMakeRange(0, [searchText length])];
                                //NSLog(@"%@",firstLetter);

                                if( [firstLetter caseInsensitiveCompare:searchText] == NSOrderedSame )
                                {
                                    // strings are equal except for possibly case
                                    [self.listOfTemArray addObject: [self.ItemOfMainArray objectAtIndex:i]];
                                    NSLog(@"=========> %@",self.listOfTemArray);
                                }
                         }
                 }
         }
         else
         {
             [self.listOfTemArray addObjectsFromArray:self.ItemOfMainArray ];
         }

        [self.tblView reloadData];
}

并写在cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Foobar"];
    if (cell == nil) 
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Foobar"];

        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
        cell.textLabel.textColor = [UIColor blackColor];
    }

        cell.textLabel.text = [self.listOfTemArray objectAtIndex: indexPath.row];

    return cell;
}

此代码可能对您有帮助...谢谢:)

于 2013-02-04T06:18:19.240 回答