2017-10-20 90 views
0

我在我的项目中使用UIActionsheet uipickerview。在这里,我根据他的身份证传递价值。 我的意思是,在uipickerview列表中它会显示名称,并通过它后,它的ID。如何在iOS的UIPickerview上添加搜索选项?

所以,对于5-10个值是可以的,但假设我有超过100个值与它的ID,那么需要很长时间滚动,查找和选择一个值。

所以,我想在其中添加搜索选项。所以在点击我的文本框后,选择器或弹出窗口就会出现。它首先显示一些列表,以及可用的搜索选项,因此用户可以键入任意一个或两个单词,因此根据单词数据将按照单词(自动搜索完成)进行输入。

我该如何实现它。

回答

3

,如果有人想它迅速... 创建名为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的你必须做一些像下面。但不要忘记调用textField Delegates。

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; 

} 

如果数据不是字典,你可以删除代码的工作,是关于字典

+0

哈桑先生的阵列的形式注,我的代码是在Objective C,所以我不能够理解上面的SWIFT代码,你可以发布它的目标C代码(如果可以的话),否则我会试着去理解这段代码。 –

+0

好吧让我把它转换成目标 - C –

+0

更新了代码请检查它。现在它有两个。语言....可能不是完全正确的,但你必须这样做。 –

相关问题