0

我想搜索 NSMutalbleArray,我的代码是:

    arrCelebs=[[NSMutableArray alloc] initWithObjects:@"Test 1",@"Test 2",@"Test 42",@"Test 5", nil];

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSString *arrString1 = txtSearch.text;
    NSRange tmprange;
    for(NSString *string in arrCelebs) {
            tmprange = [arrString1 rangeOfString:string];
            if (tmprange.location != NSNotFound) {
                     NSLog(@"String found");
                    break;
            }
    }
    return YES;
    }

如果我输入“t”然后它搜索所有数据,我想添加另一个数组。用于在 tableview 中显示。

4

6 回答 6

7

你可以使用的力量NSPredicate

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[c] %@", textField.text];
NSArray *filteredArray = [arrCelebs filteredArrayUsingPredicate:predicate];
于 2013-03-15T13:46:55.913 回答
3

通过使用谓词,您可以轻松高效地得到结果。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@",  txtSearch.text];
    NSArray *ResultArray = [yourArray filteredArrayUsingPredicate:predicate];
    return YES;
}
于 2013-03-15T13:52:31.927 回答
0

尝试 :

arr_NewArray  = [[NSMutableArray alloc] init];

for (int i = 0; i < [arr_YourArrayToSearch count]; i++)
{
     NSString *curString = [string lowercaseString];
     NSString *curStringInArray = [[arr_YourArrayToSearch objectAtIndex:i]lowercaseString];

     if (![curString rangeOfString:curStringSmall].location == NSNotFound)
     {
          [arr_NewArray addObject:[arr_YourArrayToSearch objectAtIndex:i]];
     }
 }

arr_NewArray 将为您提供与您的搜索字符串匹配的数据的数组。

于 2013-03-15T13:46:42.037 回答
0
arrCelebs=[[NSMutableArray alloc] initWithObjects:@"Test 1",@"Test 2",@"Test 42",@"Test 5", nil];

_resultArray = [[NSMutableArray alloc] init];

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

NSString *arrString1 = txtSearch.text;
NSRange tmprange;
_resultArray = [[NSMutableArray alloc] init];
for(NSString *string in arrCelebs) {
        tmprange = [arrString1 rangeOfString:string];
        if (tmprange.location != NSNotFound) {
                 [_resultArray addObject:string];
        }
}
return YES;
}
于 2013-03-15T13:50:08.577 回答
0

这正是你想要的......

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSMutableArray *resultAry = [[NSMutableArray alloc] init];
    for(NSString *string in arrCelebs)
    {
        NSRange range = [string rangeOfString:textField.text options:NSCaseInsensitiveSearch];

        if(range.location != NSNotFound)
        {
            [resultAry addObject:string];
        }
    }
    yourTableAry=[resultAry mutableCopy];
    [yourTable reloadData];
    return YES;
}
于 2013-03-15T13:58:59.447 回答
0

如果您使用UITableView,那么您也可以使用这种类型的逻辑。

取两个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

并编写以下 UISearchBar 的委托方法

- (BOOL) textFieldDidChange:(UITextField *)textField
 {
        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];
}

}

输出显示在您的Consol.

于 2013-03-15T14:00:38.080 回答