0

我想创建一个搜索栏,用户将只键入一部分时区,如果数组中存在,它将显示我的数组中的完整时区。例如,如果用户键入“dhaka”,搜索栏将显示完整的字符串“Asia/Dhaka”。那有可能吗?如果可能的话,请指导我的方式。非常感谢您的帮助。

4

3 回答 3

0

它可能使用 UISearchBar 对象(链接)进行搜索。

显示结果实现 UISearchDisplayController ( link ) 和它的 Delegate ( link )。将您的时区/城市的简单数组添加到其数据源。每次用户输入字符 shouldReloadTableForSearchString 时都会被调用,因此会进行查询以查找时区/城市匹配项

于 2013-08-22T08:28:27.847 回答
0

有很多逻辑,但我把我的逻辑放在这里:

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

- (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];
}
}

输出显示在您的Consol.

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

于 2013-08-22T08:43:49.187 回答
0

您可以为此使用 NSPredicate

喜欢

- (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);
}

注意:未测试代码

于 2013-08-22T09:09:34.417 回答