2012-07-23 7 views
26

Poprosiłem tylko a question temat sposobu monitorowania zmian w UITextField i otrzymał tę odpowiedź:Znając kompletny zmieniły ciąg w textField: shouldChangeCharactersInRange: replacementString:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)replacementStr { 
    // Enable "Next" if you like what's entered in the replacementStr 
} 

To działa, ale ciąg wymiana nie jest cała ciąg, właśnie to, co dodaje. Jak mogę uzyskać cały ciąg? Moim celem jest sprawdzenie, czy napis w polu tekstowym jest pusty lub równy pewnej liczbie (w różnych scenariuszach).

Należy pamiętać, że wylot do pola tekstowego nie działa w tym przypadku, ponieważ ta metoda jest wywoływana przed zmianą tekstu w polu.

+0

TextField.text jest cały ciąg. Przynajmniej jest to cały stary ciąg. –

Odpowiedz

65
NSString * proposedNewString = [[textField text] stringByReplacingCharactersInRange:range withString:replacementString]; 
+1

Co zrobić, jeśli używają Backspace? Czy to nadal będzie działać? To nie zadziałało, kiedy próbowałem dołączyć. Jeśli są backspace, nie ma zastępczego łańcucha, ale łańcuch textField będzie o jeden mniej. Może to stanowić problem, jeśli sprawdzam liczbę niezerową, a pole tekstowe wynosi, powiedzmy, 5, a następnie backspace. –

+3

Tak, działa na backspace. –

0
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

// [textField2 setText:[textField1.text stringByReplacingCharactersInRange:range withString:string]]; 
    NSLog(@"%@",searchStr); 
    return YES; 
} 
9

Swift Wersja

W Swift Musimy rzucić textField's tekst NSString. Poniższy mogą być przydatne:

let newString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string) 

Swift 4

let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)