2011-11-23 4 views
27

Ho un UITextField in cui l'utente può inserire un nome e salvarlo. Ma all'utente non dovrebbe essere permesso di inserire spazi vuoti nel file di testo.Come sapere se un UITextField in iOS ha spazi vuoti

1 - Come faccio a sapere sapere se l'utente ha inserito due spazi vuoti o spazi vuoti completi nel textFiled

2 - Come faccio a sapere se il textFiled è riempito solo con gli spazi vuoti

modifica - E non è valido per entrare solo gli spazi bianchi (spazi vuoti)

+0

bisogno di chiarimenti: è l'utente non possono entrare * qualsiasi * spazi a tutti, o è solo valido per entrare * solo * spazi bianchi? Cioè, la stringa '" questo è un test "' valida o no? – DarkDust

risposta

96

È possibile "ritagliare" il testo, che è rimuovere tutti gli spazi all'inizio e alla fine. Se tutto ciò che rimane è una stringa vuota, allora è stato inserito solo uno spazio bianco (o niente).

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

Se si desidera verificare se vi siano spazi bianchi (in qualsiasi parte del testo), si può fare in questo modo:

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

Se si vuole evitare che l'utente di entrare spazi a tutti , vedi @ soluzione di Hanon.

+0

Wow .. questo ha funzionato, amico ... fantastico . al punto di rispondere ..... ne hai 25 per questo. 15 + 10 .....;) Grazie mille –

+0

DarkDust Ho imparato dalla tua risposta. (+ 1) Perché il log delle stringhe tagliato non è come previsto per [NSString stringWithString: @ "space"] se lo si registra dopo/al di fuori del blocco? –

+2

@Maudicus: Ritaglio significa rimuovere solo dall'inizio e dalla fine. Ogni spazio bianco nel mezzo è conservato. – DarkDust

6

Usa seguenti righe di codice

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

se si desidera limitare l'utente utilizza il codice qui sotto

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

Questo troverà * qualsiasi * spazio bianco (ad esempio anche in "" Un titolo "'). Il poster vuole sapere se la stringa è * solo * spazio bianco (ad esempio '" "'). – DarkDust

+0

Per quello funzionerà anche – Narayana

+0

grazie per la risposta narayana ... ho provato questo approccio prima di postare la domanda ma non ho trovato alcun successo .... +1 anche per la tua risposta –

14

se si vuole veramente a 'limitare' all'utente di immettere uno spazio bianco

è possibile implementare il metodo seguente in 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; 
    } 
} 

Se l'utente entra spazio nel campo, non v'è alcun cambiamento nella testo attuale

0

@ risposta di Hanon è il abbastanza carino, ma quello che mi serviva era quello di consentire almeno 1 spazio bianco, quindi sulla base di soluzione di Hanon ho fatto questo:

Ho dichiarato una variabile locale chiamata whitespaceCount per mantenere il conteggio degli spazi bianchi. Spero che questo aiuti qualcuno!

- (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

ho avuto una stessa condizione non permettendo all'utente di inserire campo vuoto

Ecco il mio codice e verificare dichiarazione

- (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 Supporto

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

Ecco cosa ho fatto 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 3 versione

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