2013-03-14 15 views
6

Chciałbym uniemożliwić użytkownikowi wprowadzanie jakichkolwiek danych, a także wprowadzanie tylko spacji. Więc zasadniczo musi istnieć przynajmniej jedna postać bez spacji. Chciałbym też usunąć wszystkie spacje na początku słowa, aby pierwsza litera była znakiem, który nie jest spacją.Cel-c Jak wykonać walidację na tekście

edit

użytkownik musi wprowadzić coś, a jeśli użytkownik wprowadzi kilka spacji przed potem chcę przyciąć te przestrzenie. Chcę również uniemożliwić użytkownikowi wprowadzanie właśnie spacji.

Przykład

gdy użytkownik wchodzi to imię i nazwisko jak „James Dean” Chciałbym, aby wykonać pierwsze miejsce z dala ale nie drugą przestrzeń między Jamesem i Dean.

+1

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

+1

dla więcej przejdź do wyrażeń regularnych –

+1

co chcesz dokładnie chcesz wprowadzić ciąg, który nie jest o pierwszą literę jako przestrzeń jestem? dobrze? – Balu

Odpowiedz

15

Ustaw UIViewController być cel UITextField „s delegate i wdrożenie tej metody:

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

Genialny! Dziękuję bardzo :) –

+0

Znakomita .. !! Uratowałem mój dzień (Y) –

+0

UWAGA: characterSetWithCharactersInString przykład nie zawiera liter używanych w językach innych niż angielski. Na przykład, jeśli masz europejskich użytkowników, mogą oni wpisywać litery ze znakami diakrytycznymi nad nimi. Odrzucanie tych jest prawdopodobnie nie do przyjęcia poza angielskimi ustawieniami regionalnymi. Jako minimum, zastąp taką literę wersją "zwykłą" (litera bez znaku). To nie jest do przyjęcia, ale jest mniej nieprzyjemne niż wyrzucenie listu. – ToolmakerSteve

1

Dam ci wskazówkę na pierwszą część.

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

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

Dzięki temu działam do tego stopnia, że ​​muszę usunąć spacje na początku słowa. – user1898829

0

Spróbuj tego, jeśli chcesz, aby zapobiec miejsca w polu tekstowym.

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

To oczywiście nie pozwoli na dodanie żadnych spacji. – Eugene

+0

To jest blisko tego, co chcę zrobić. Ale jeśli użytkownik wpisze imię i nazwisko takie jak "James Dean", chciałbym zająć pierwsze miejsce, ale nie drugie miejsce pomiędzy Jamesem i Deanem. – user1898829

+0

@ user1898829 do tego możesz użyć [txtUserName.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; – Kalpesh

5

spróbować jak to może być, że pomaga wam, tu jest mój kod

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

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

Poprzez umieszczenie tego użytkownika kodu nie wejdzie przestrzeń jako pierwszej litery, ale akceptuje przestrzeń w środku ciągu.

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

Myślę, że to ci pomoże – Marking

Powiązane problemy