2013-08-23 6 views
0

J'ai vu plusieurs approches à ce sujet, mais je n'arrive pas à le faire fonctionner. J'essaie de restreindre un champ de texte pour autoriser seulement les caractères alpha qui y sont saisis. C'est à dire. ABCDEFabcdef (mais tous).Limitation de la saisie de texte aux seuls caractères alpha

Voici ma méthode existante:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

    // Check for the back space/delete 
    if (string.length <=0) { 
     if ([self.wordArray lastObject]) { 
      [self.wordArray removeObjectsInRange:range]; 
      [self.tileCollectionView reloadData]; 
      return YES; 

     } 
    } 

    // Check to make sure the word is not above 16 characters, that should be enough right? 
    if (textField.text.length >= 16) { 
     NSLog(@"WOOO SLOW DOWN THE TEXT IS ABOVE 16"); 
     return NO; 
    } else { 
      [self.wordArray addObject:string]; 
      [self.tileCollectionView reloadData]; 
      return YES; 
    } 

} 

À l'heure actuelle je vérifie un espace arrière et enlever la dernière entrée d'un tableau. Aussi, si la lettre est acceptée, j'ajoute la lettre comme un objet à un tableau, c'est-à-dire pour quelque chose d'autre. Mais la logique de la vérification ALPHA devrait aussi en tenir compte, seulement si la lettre est "légale" si elle s'ajoute au tableau et recharge la vue de la collection.

+0

Quel est exactement le problème? Vous avez trouvé le bon délégué à utiliser. –

Répondre

5

Eh bien, une façon de le faire serait de créer votre propre jeu de caractères à comparer. Ensuite, vous pouvez tirer parti de stringByTrimmingCharactersInSet: de NSString et de la propriété invertedSet de NSCharacterSet pour supprimer tous les caractères de l'ensemble qui ne correspondent pas aux caractères que vous spécifiez initialement. Ensuite, si la chaîne finale correspond à la chaîne d'entrée, elle ne contient pas de caractères non autorisés.

NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"]; 

NSString *input = @"a"; 

NSString *output = [input stringByTrimmingCharactersInSet:[myCharSet invertedSet]]; 

BOOL isValid = [input isEqualToString:output]; 

NSLog(@"%d",isValid); 
+0

Simples, j'ai remplacé la référence 'input' par 'string' qui est la valeur par défaut pour cette méthode. Merci – StuartM

Questions connexes