Iphone 搜索栏从NSArray搜索

Iphone 搜索栏从NSArray搜索,iphone,ios,nstimezone,Iphone,Ios,Nstimezone,我想做一个搜索栏,用户将只键入时区的一部分&它将显示我的数组中的完整时区(如果数组中存在)。e、 g.如果用户键入“dhaka”,搜索栏将显示完整字符串“Asia/dhaka”。这可能吗?如果可能的话,请给我指路。非常感谢您的帮助。可能使用UISearchBar对象()进行搜索 显示结果实现UISearchDisplayController()及其委托()。将时区/城市的简单数组添加到其数据源中。每次用户输入字符shouldReloadTableForSearchString时,都会被调用,所以

我想做一个搜索栏,用户将只键入时区的一部分&它将显示我的数组中的完整时区(如果数组中存在)。e、 g.如果用户键入“dhaka”,搜索栏将显示完整字符串“Asia/dhaka”。这可能吗?如果可能的话,请给我指路。非常感谢您的帮助。

可能使用UISearchBar对象()进行搜索


显示结果实现UISearchDisplayController()及其委托()。将时区/城市的简单数组添加到其数据源中。每次用户输入字符shouldReloadTableForSearchString时,都会被调用,所以要进行查询以查找时区/城市匹配项,这里有很多逻辑,但我把我的逻辑放在这里:

ViewDidLoad
方法中,使用两个
NSMutableArray
将一个数组添加到另一个数组中

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的委托方法

- (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];
}
}
-(无效)搜索栏:(UISearchBar*)搜索栏文本更改:(NSString*)搜索文本
{
NSString*name=@;
NSString*firstLetter=@;
如果(self.listofTermarray.count>0)
[self.listofteray removeAllObjects];
如果([searchText length]>0)
{
for(int i=0;i<[self.itemof主数组计数];i=i+1)
{
name=[self.ItemOfMainArray对象索引:i];
如果(name.length>=searchText.length)
{
firstLetter=[name substringWithRange:NSMakeRange(0[searchText-length]);
//NSLog(@“%@”,第一个字母);
if([firstLetter caseInsensitiveCompare:searchText]==SensorDeredName)
{
//除了可能的大小写外,字符串是相等的
[self.listofTermarray addObject:[self.ItemOfMainArray objectAtIndex:i]];
NSLog(@“==========>%@”,self.listofterray);
}
}
}
}
其他的
{
[self.listofTermarray addObjectsFromArray:self.ItemOfMainArray];
}
[self.tblView reloadData];
}
}
控制台中显示输出。


此代码可能对您有所帮助。

您可以使用NSPredicate进行此操作

-(无效)搜索栏:(UISearchBar*)搜索栏文本更改:(NSString*)搜索文本
{
如果(searchText.length<1){
//使用完整阵列重新加载
返回;
}
NSArray*时区=…;//yourfullArray;
NSPredicate*谓词=[NSPredicate PREDICTEWITHFORMAT:@“(时区名称包含[cd]@)”,searchText];//如果您的数组仅为字符串,则将格式更改为@”(自包含[cd]@)
NSArray*filterdZones=[时区filteredArrayUsingPredicate:predicate];
NSLog(@“filterdZones%”,filterdZones);
}

注意:未测试代码

可能会有帮助-u r所说的是表视图。但我不想让它成为表视图。只是一个搜索栏&从数组中搜索。谢谢你的努力。如果你在寻找自动完成功能,请查看此项目()
- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText
{
if(searchText.length < 1){
//reload with full array
return;
}
    NSArray *timeZones = ...;//yourfullArray;
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(timeZoneName CONTAINS [cd] %@)",searchText];//if ur array is only strings then change format to @"(self CONTAINS [cd] %@)"
         NSArray *filterdZones = [timeZones filteredArrayUsingPredicate:predicate];
NSLog(@"filterdZones %@",filterdZones);
}