2017-10-20 86 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

更新了代碼請檢查它。現在它有兩個。語言....可能不是完全正確的,但你必須這樣做。 –

相關問題