web-dev-qa-db-fra.com

Comment savoir si un UITextField dans iOS a des espaces vides

J'ai un UITextField où l'utilisateur peut entrer un nom et l'enregistrer. Mais, l'utilisateur ne doit pas être autorisé à entrer des espaces vides dans le textFiled.

1 - Comment puis-je savoir si l'utilisateur a entré deux espaces vides ou des espaces vides complets dans le textFiled

2 - Comment savoir si le textFiled est rempli uniquement avec des espaces vides

modifier - Il n'est pas valide de saisir uniquement des espaces blancs (espaces vides)

29
A for Alpha

Vous pouvez "rogner" le texte, c'est-à-dire supprimer tous les espaces au début et à la fin. S'il ne reste qu'une chaîne vide, seuls les espaces (ou rien) ont été saisis.

NSString *rawString = [textField text];
NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString *trimmed = [rawString stringByTrimmingCharactersInSet:whitespace];
if ([trimmed length] == 0) {
    // Text was empty or only whitespace.
}

Si vous voulez vérifier s'il y a des espaces (n'importe où dans le texte), vous pouvez le faire comme ceci:

NSRange range = [rawString rangeOfCharacterFromSet:whitespace];
if (range.location != NSNotFound) {
    // There is whitespace.
}

Si vous souhaitez empêcher l'utilisateur d'entrer dans les espaces blancs, consultez la solution de @ Hanon.

97
DarkDust

si vous voulez vraiment "restreindre" l'utilisateur à entrer dans l'espace blanc

vous pouvez implémenter la méthode suivante dans UITextFieldDelegate

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

    NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string];
    NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];
    if  ([resultingString rangeOfCharacterFromSet:whitespaceSet].location == NSNotFound)      {
        return YES;
    }  else  {
        return NO;
    }
 }

Si l'utilisateur saisit un espace dans le champ, il n'y a aucun changement dans le texte actuel

13
Hanon

Utilisez les lignes de code suivantes

NSString *str_test = @"Example ";
NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];
if([str_test rangeOfCharacterFromSet:whitespaceSet].location!=NSNotFound)
{
    NSLog(@"Found");
}

si vous souhaitez restreindre l'utilisation des utilisateurs sous le code

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if([string isEqualToString:@" "])
    {
        return NO
    }
    else
    {
        return YES
    }
}
6
Narayana

PD: Swift 2.0

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let whitespaceSet = NSCharacterSet.whitespaceCharacterSet()
    let range = string.rangeOfCharacterFromSet(whitespaceSet)
    if let _ = range {
        return false
    }
    else {
        return true
    }
}
3
Yevhen Dubinin

J'ai eu la même condition ne permettant pas à l'utilisateur de saisir un champ vide

Voici mon code et ma déclaration de vérification

- (IBAction)acceptButtonClicked:(UIButton *)sender {
if ([self textFieldBlankorNot:fullNametext]) {
        fullNametext.text=@"na";
    }
// saving value to dictionary and sending to server

}

-(BOOL)textFieldBlankorNot:(UITextField *)textfield{
    NSString *rawString = [textfield text];
    NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
    NSString *trimmed = [rawString stringByTrimmingCharactersInSet:whitespace];
    if ([trimmed length] == 0)
        return YES;
    else
        return NO;
}
1
DreamWatcher

Heres Swift 3 version

let whitespaceSet = NSCharacterSet.whitespaces
let range = string.rangeOfCharacter(from: whitespaceSet)
if let _ = range {
    return false
}
else {
    return true
}
1
Pankaj Gaikar

Voici ce que j'ai fait en utilisant stringByReplacingOccurrencesOfString.

- (BOOL)validateFields
 {
      NSString *temp = [textField.text stringByReplacingOccurrencesOfString:@" "
                                                          withString:@""
                                                             options:NSLiteralSearch
                                                               range:NSMakeRange(0, textField.text.length)];

      if ([temp length] == 0) {
          // Alert view with message @"Please enter something."
          return NO;
      }
 }
0
Arnlee Vizcayno

@ La réponse de Hanon est assez soignée, mais ce dont j'avais besoin était d'autoriser au moins 1 espace blanc, donc en fonction de la solution de Hanon, j'ai fait celui-ci:

J'ai déclaré une variable locale appelée whitespaceCount pour conserver le nombre d'espaces blancs. J'espère que cela aide n'importe qui!

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range     replacementString:(NSString *)string 
{ 
    NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];

    if ([string rangeOfCharacterFromSet:whitespaceSet].location != NSNotFound) 
    {
        whitespaceCount++;
        if (whitespaceCount > 1) 
        {
            return NO;
        }
    }
    else 
    {
        whitespaceCount = 0;
        return YES;
    }
}
0
DZenBot