如何在ios的UIPickerview上添加搜索选项



我在我的项目中使用了UIActionsheet uipickerview。在这里,我根据他的 id 传递值。我的意思是,在 uipickerview 列表中,它将显示名称,传递后它会获取其 id。

因此,对于 5-10 个值是可以的,但假设我的 id 有 100 多个值,那么滚动、查找和选择一个值需要花费大量时间。

所以,我想在其中添加搜索选项。因此,单击我的文本字段后,将出现该选择器或弹出窗口。它首先显示一些列表,以及那里可用的搜索选项,因此用户可以键入任何一两个单词,因此根据其单词数据将根据单词(自动搜索完成)。

我该如何实现它。

如果有人想要它迅速...创建一个名为 txtSearch 的文本字段,然后在 ViewDidload 中添加两行

self.txtSearch.delegate=self
self.txtSearch.addTarget(self, action: #selector(self.textFieldValueChanged(TextField:)), for: UIControlEvents.editingChanged)
func textFieldValueChanged(TextField:UITextField)
{
    if((TextField.text?.characters.count)!>0)
    {
        self.filteredArray = (self.searchInArray(srchArray: self.ArraywithFullData, withKey: "key value", Characters: TextField.text!))!
    }
    else
    {
        self.filteredArray = self.ArraywithFullData.mutableCopy() as! NSMutableArray
    }
    self.pickerView.reloadData()

}
func searchInArray(srchArray:NSMutableArray, withKey:String,Characters:String)->NSMutableArray
{
    let resultArray=NSMutableArray()
    for index in 0..<srchArray.count
    {
        let Dict  = srchArray[index] as! [String:Any]
        if let stringmatcher = Dict[withKey] as? String
        {
            if(stringmatcher.contains(find: Characters))
            {
                resultArray.add(Dict)
            }
            else
            {
            }
        }
    }
 return resultArray
}
extension String {
func contains(find: String) -> Bool{
    return self.range(of: find) != nil
}

对于 Objective-C,你必须做如下的事情。但不要忘记称呼文本字段代表。

NSMutableArray *filteredArray;
NSMutableArray *ArraywithFullData;
self.txtSearch.delegate=self
[self.txtSearch addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
//
-(void)textFieldValueChanged:(UITextField *)TextField
{
    if((TextField.text.length)>0)
    {
        filteredArray = [self  searchInArray:ArraywithFullData withKey:@"key value" andCharacters:TextField.text];
    }
    else
    {
        filteredArray = [ArraywithFullData mutableCopy];
    }
    [self.pickerView reloadData];

}
-(NSMutableArray *)searchInArray:(NSMutableArray*)srchArray withKey:(NSString *)key andCharacters:(NSString *)charecters
{
    NSMutableArray *resultArray= [[NSMutableArray alloc]init];
    for (int index=0 ; index<srchArray.count; index++)
    {
        NSMutableDictionary *Dict  = srchArray[index];
        if ([Dict valueForKey:key] != nil)
        {
            NSString * stringmatcher = [Dict valueForKey:key];
            if ([stringmatcher containsString:charecters])
            {
                [resultArray addObject:Dict];
            }
            else
            {
            }
        }
    }
    return resultArray;
}

请注意,如果数据不是字典数组的形式,则可以删除有关字典的代码工作

最新更新