2013-03-14 9 views
6

vorrei evitare che l'utente non inserire dati, nonché di entrare solo spazi. Quindi in pratica deve esserci almeno un personaggio senza spazio. Quindi vorrei anche rimuovere qualsiasi spazio all'inizio della parola in modo che la prima lettera sia un carattere che non è uno spazio.Objective-c Come fare convalida textField

modificare

l'utente deve inserire qualcosa e se l'utente inserisce un paio di spazi prima che poi voglio tagliare quegli spazi. Voglio anche impedire all'utente di inserire solo gli spazi.

Esempio

se all'utente di inserire un nome e cognome come "James Dean" Vorrei prendere il primo spazio di distanza, ma non il secondo spazio tra James e Dean.

+1

[stringByTrimmingCharactersInSet str: <# (NSCharacterSet *) #>] –

+1

per più andare per le espressioni regolari –

+1

ciò che si vuole esattamente si vuole inserire la stringa che non sta avendo la prima lettera come uno spazio sono io? destra? – Balu

risposta

15

impostare il proprio UIViewController per essere la vostra destinazione UITextField s' delegate e implementare questo metodo:

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

    // verify the text field you wanna validate 
    if (textField == _nameTextField) { 

    // do not allow the first character to be space | do not allow more than one space 
    if ([string isEqualToString:@" "]) { 
     if (!textField.text.length) 
     return NO; 
     if ([[textField.text stringByReplacingCharactersInRange:range withString:string] rangeOfString:@" "].length) 
     return NO; 
    } 

    // allow backspace 
    if ([textField.text stringByReplacingCharactersInRange:range withString:string].length < textField.text.length) { 
     return YES; 
    } 

    // in case you need to limit the max number of characters 
    if ([textField.text stringByReplacingCharactersInRange:range withString:string].length > 30) { 
     return NO; 
    } 

    // limit the input to only the stuff in this character set, so no emoji or cirylic or any other insane characters 
    NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "]; 

    if ([string rangeOfCharacterFromSet:set].location == NSNotFound) { 
     return NO; 
    } 

    } 

    return YES; 
} 
+0

Brillante! Grazie mille :) –

+0

Superbo .. !! Mi ha salvato la giornata (Y) –

+0

ATTENZIONE: characterSetWithCharactersInString esempio non include lettere utilizzate in lingue diverse dall'inglese. Ad esempio, se hai utenti europei, possono inserire lettere con segni diacritici sopra di loro. Rifiutare quelli è probabilmente non accettabile al di fuori delle impostazioni locali inglesi. Come minimo, sostituire tale lettera con la versione "semplice" (la lettera senza il segno). Questo non è veramente accettabile, ma è meno odioso che buttare via la lettera. – ToolmakerSteve

1

io ti do un suggerimento per la prima parte.

NSString *tempname1 = [self.textField.text stringByReplacingOccurrencesOfString:@" " withString:@""]; 

BOOL thereAreJustSpaces = [tempname1 isEqualToString:@""]; 
+0

Grazie a cui ho lavorato fino al punto in cui devo semplicemente rimuovere gli spazi all'inizio della parola. – user1898829

0

Prova questa, se si vuole evitare che lo spazio nel vostro campo di testo.

- (void)viewDidLoad 
{ 
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(checkSpace:) name:UITextFieldTextDidChangeNotification object:textfield]; 

} 
-(void)checkSpace:(NSNotification *)notification 
{ 

    str = [textfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] ; 
textfield.text=str; 
} 
+0

Questo ovviamente non permetterà di aggiungere eventuali spazi a tutti – Eugene

+0

Questo è vicino a quello che voglio fare. Ma se l'utente inserisce un nome e un cognome come "James Dean" mi piacerebbe prendere il primo spazio ma non il secondo spazio tra James e Dean. – user1898829

+0

@ user1898829 per questo è possibile utilizzare [txtUserName.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; – Kalpesh

5

prova come questo può essere aiuta a voi, qui è il mio codice

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range 

    replacementString:(NSString *)string{ 
     if([text.text length]==0){ 
     if([string isEqualToString:@" "]){ 
      return NO; 
     } 
     } 
     return YES; 
    } 

Inserendo questo codice utente non entrerà spazio come una prima lettera, ma accetta lo spazio in mezzo della stringa.

1
-(void)removeSpacesFromTextFields:(id) sender { 
    NSString *trim = [self.FNTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
    if ([trim length] == 0) { 
     self.FNTextField.text = @""; 
    } 
} 
+0

Penso che questo ti aiuterà – Marking