2017-10-20 17 views
0

J'utilise UIActionsheet uipickerview dans mon projet. Ici, je passe la valeur selon son id. Je veux dire, dans la liste uipickerview, il affichera le nom, et après le passage, il prendra son identifiant. Donc, pour les valeurs de 5-10, c'est ok, mais supposons que j'ai plus de 100 valeurs avec son identifiant, il faut beaucoup de temps pour faire défiler, trouver et sélectionner une valeur.Comment puis-je ajouter une option de recherche sur UIPickerview dans ios?

Donc, je veux ajouter une option de recherche dedans. Donc, après avoir cliqué sur mon champ de texte, ce sélecteur ou cette fenêtre s'affichera. Et il montre une liste d'abord, ainsi que l'option de recherche disponible là-bas afin que l'utilisateur peut taper un ou deux mots, donc selon ses mots, les données viendront selon le mot (recherche automatique complète).

Comment puis-je l'implémenter?

Répondre

3

Si quelqu'un qu'il veut dans rapide ... Créer un champ de texte avec le nom txtSearch puis dans viewDidLoad ajouter deux lignes ci-dessous

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 
} 

Et pour Objective-C Vous devez faire quelque chose comme ci-dessous. Mais n'oubliez pas d'appeler 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; 

} 

Remarque si les données ne sont pas sous forme de tableau de dictionnaires que vous pouvez supprimer le travail de code qui est de dictionnaires

+0

Hassan Monsieur, Mon code est dans l'objectif c, donc je ne suis pas en mesure de comprendre au-dessus du code rapide , Pouvez-vous poster le code objectif c (si vous le pouvez) ou bien je vais essayer de comprendre ce code. –

+0

ok laissez-moi le convertir en objectif-C –

+0

Mis à jour le code S'il vous plaît vérifier. maintenant, il a les deux. Langues .... Peut-être pas Exactement, mais quelque chose comme ça, vous devez faire. –