Проблема в том, что что-либо после первого return
не выполняется.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return (newLength > 10) ? NO : YES;
// unreachable!
Таким образом, вы просто проверяете длину, а не числовой ввод.Измените эту строку:
return (newLength > 10) ? NO : YES;
на эту:
if (newLength > 10) return NO;
, и она должна работать.Вы также можете при желании изменить это:
[NSCharacterSet characterSetWithCharactersInString:@"0123456789"]
с этим:
[NSCharacterSet decimalDigitCharacterSet]