2011-11-23 7 views
27

Tengo un UITextField donde el usuario puede ingresar un nombre y guardarlo. Sin embargo, no se debe permitir que el usuario ingrese espacios en blanco en el texto Archivado.Cómo saber si un UITextField en iOS tiene espacios en blanco

1 - ¿Cómo puedo averiguar averiguar si el usuario ha introducido dos espacios en blanco o espacios en blanco completas en el textFiled

2 - ¿Cómo puedo saber si el textFiled sólo se llena con espacios en blanco

edición - No es válido sólo para entrar en los espacios en blanco (espacios en blanco)

+0

necesitan aclaración: es el usuario no se les permite entrar en cualquier * * espacios en blanco en absoluto, o sólo es válido para entrar * * Sólo los espacios en blanco? Es decir, ¿la cadena '" esta es una prueba "' válida o no? – DarkDust

Respuesta

96

Usted puede "recortar" el texto, que es quitar todo el espacio en blanco al principio y al final. Si todo lo que queda es una cadena vacía, entonces solo se ingresó el espacio en blanco (o nada).

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

Si desea comprobar si existe algún espacio en blanco (en todo el texto), puede hacerlo de esta manera:

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

Si desea evitar que el usuario entre en el espacio en blanco en absoluto , ver la solución de @ Hanon.

+0

Wow ... este tipo trabajado ... fantástico . al punto respuesta ..... tienes 25 para esto. 15 + 10 .....;) Muchas gracias –

+0

DarkDust Me enteré por su respuesta. (+ 1) ¿Por qué la cadena recortada no se registra como se espera para [NSString stringWithString: @ "espacio"] si la registra después/fuera del bloque if? –

+2

@Maudicus: recorte significa eliminar solo desde el principio y el final. Cualquier espacio en blanco en el medio se conserva. – DarkDust

6

uso siguientes líneas de código

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

si desea restringir el uso de usuario a continuación código

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

Esto encontrará * any * espacios en blanco (por ejemplo, también en '" Un título "'). El póster quiere saber si la cadena es * solo * espacios en blanco (por ejemplo '" "'). – DarkDust

+0

Para eso también va a funcionar – Narayana

+0

gracias por la respuesta narayana ... intenté este enfoque antes de publicar la pregunta pero no encontré ningún éxito .... +1 por tu respuesta también –

14

si realmente quiere 'restringir' el usuario entre en el espacio en blanco

se puede aplicar el siguiente método en 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 el usuario introduce el espacio en el campo, no hay ningún cambio en el texto actual

0

@ respuesta de Hanon es la buena pinta, pero lo que necesitaba era permitir al menos 1 espacio en blanco, por lo que en base a la solución de Hanon hice éste:

Declaro una variable local llamada whitespaceCount para mantener los recuentos de los espacios en blanco. Espero que esto ayude a cualquiera!

- (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; 
    } 
} 
1

que tenían una misma condición que no permite al usuario introducir campo en blanco

Aquí está mi código y comprobar comunicado

- (IBAction)acceptButtonClicked:(UIButton *)sender { 
if ([self textFieldBlankorNot:fullNametext]) { 
     [email protected]"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; 
} 
3

UPD: Swift 2.0 Soporte

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 
    } 
} 
0

Esto es lo que hice usando 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; 
     } 
} 
1

Heres Swift versión 3

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