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)
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.
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
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
}
}
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
}
}
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;
}
Heres Swift 3 version
let whitespaceSet = NSCharacterSet.whitespaces
let range = string.rangeOfCharacter(from: whitespaceSet)
if let _ = range {
return false
}
else {
return true
}
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;
}
}
@ 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;
}
}