Проверьте длину. Если он слишком длинный, верните NO
. В противном случае проверьте правильность символов.
Ваш код для проверки действительных символов очень неэффективен.
Следующий код - лучший способ справиться с вашим случаем:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = textField.text.length + string.length - range.length;
if (newLength > limitPassportNumber) {
return NO; // too long
}
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];
NSRange badRange = [string rangeOfCharacterFromSet:cs];
return badRange.location == NSNotFound;
}
Следующий код - лучший способ обработать ваш случай: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = textField.text.length + string.length - range.length;
if (newLength > limitPassportNumber) {
return NO; // too long
}
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];
NSRange badRange = [string rangeOfCharacterFromSet:cs];
return badRange.location == NSNotFound;
}