2011-11-23 12 views
27

Mam UITextField, gdzie użytkownik może wprowadzić nazwę i zapisać ją. Ale użytkownik nie powinien mieć możliwości wprowadzania pustych pól w textFiled.Jak sprawdzić, czy UITextField w iOS ma puste spacje

1 - Jak mogę dowiedzieć się, sprawdzić, czy użytkownik wprowadził dwie puste przestrzenie lub całe puste przestrzenie w textFiled

2 - Skąd mogę wiedzieć, czy textFiled jest wypełniona tylko w pustych przestrzeniach

edycja - to nieważne, aby wprowadzić tylko spacji (spacje)

+0

Potrzeba wyjaśnienia: jest użytkownik nie pozwolono wejść * żadnych * spacje w ogóle, czy też jest to tylko nieważny wpisać * * tylko spacje? To znaczy, czy ciąg '" to jest test "' jest ważny czy nie? – DarkDust

Odpowiedz

96

można „przyciąć” tekst, który ma usunąć wszystkie spacje na początku i na końcu. Jeśli wszystko, co pozostało, jest pustym łańcuchem, to wprowadzono tylko spacje (lub nic).

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

Jeśli chcesz sprawdzić, czy istnieją jakiekolwiek spacje (nigdzie w tekście), można zrobić to tak:

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

Jeśli chcesz uniemożliwić użytkownikowi wpisanie spacji w ogóle , zobacz rozwiązanie @ Hanona.

+0

Wow .. ten jeden pracował koleś ... fantastyczny . na pytanie: ... masz na to 25. 15 + 10 .....;) Thanku tak bardzo –

+0

DarkDust Dowiedziałem się z twojej odpowiedzi. (+ 1) Dlaczego nie przycięte łańcuchy logują się zgodnie z oczekiwaniami dla [NSString stringWithString: @ "space"] jeśli logujesz się po/poza blokiem if? –

+2

@Maudicus: Przycinanie oznacza usunięcie tylko od początku i końca. Wszelkie białe spacje są zachowane. – DarkDust

6

używać następujących linii kodu

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

jeśli chcesz ograniczyć korzystanie użytkownika poniżej kod

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

To znajdzie * dowolne białe spacje (na przykład również w "Tytuł"). Plakat chce wiedzieć, czy ciąg znaków jest * tylko * spacja (na przykład "" "). – DarkDust

+0

Za to również zadziała – Narayana

+0

dziękuję za odpowiedź narayana ... próbowałem tego podejścia przed opublikowaniem pytania, ale nie znalazłem żadnego sukcesu ... +1 za twoją odpowiedź też –

14

jeśli naprawdę chcesz, aby „ograniczyć” użytkownikowi wprowadzania spacji

można wdrożyć następujące metody w 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; 
    } 
} 

Jeśli użytkownik wchodzi miejsca w tej dziedzinie, nie ma żadnych zmian w obecny tekst

0

@ odpowiedź Hanon za to całkiem miłe, ale to, co było potrzebne, aby umożliwić co najmniej 1 biała przestrzeń, więc w oparciu o rozwiązania Hanon za zrobiłem to jedno:

Ogłosiłem lokalną zmienną o nazwie whitespaceCount, aby zachować liczbę białych spacji. Mam nadzieję, że to pomoże każdemu!

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

miałem sam warunek nie pozwalając użytkownikowi na wprowadzanie pustym polu

Oto mój kod i sprawdzić oświadczenie

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

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

Oto, co zrobiłem przy użyciu 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

Herezje Swift 3 wersja

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