Вы проверяете только длину текущего текста в поле.Этот метод вызывается до изменения текста, поэтому вам нужно сначала проверить длину replacementString
, а затем проверить длину текста textField
.
Попробуйте это:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (textField == codeTxt) {
// NSCharacterSet *unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS] invertedSet];
// if ([[string componentsSeparatedByCharactersInSet:[unacceptedInput count]] > 1) {
if ([[string componentsSeparatedByCharactersInSet:[[[NSCharacterSet characterSetWithCharactersInString:NUMBERS] invertedSet] autorelease]] count] > 1) {
return NO;
} else if ([string length] < 5) {
return YES;
} else if ([codeTxt.text length] >= 5]) {
return NO;
} else {
return YES;
}
}
}
Редактировать:
Проверка длины textField
, вероятно, недаже необходимо после выполнения [codeTxt.text length] >= 5]
, так как это в любом случае не позволит длине textField
превышать 4. В любом случае
На самом деле вам нужно будет проверить это, поскольку по умолчанию установлено значение return YES;
.
Вероятно, должно быть <= 5 </p>
} else if ([string length] <= 5) {
return YES;
}
Вместо <5 слишком </p>
} else if ([string length] < 5) {
return YES;
}