Установка UITextField
keyboardType
облегчает пользователю только ввод соответствующих символов. Даже на iPhone пользователи могут вводить другие символы с помощью аппаратной клавиатуры или вставляя строку.
Вместо этого реализуйте UITextFieldDelegate
-textField:shouldChangeCharactersInRange:replacementString:
для проверки ввода пользователя. Вы также, вероятно, не очень хотите жестко кодировать цифры 0-9 и точку. Например, пользователи в некоторых локалях отделяют целые числа от десятичных знаков запятой:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *candidate = [[textField text] stringByReplacingCharactersInRange:range withString:string];
if (!candidate || [candidate length] < 1 || [candidate isEqualToString:@""])
{
return YES;
}
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:candidate];
if (!number || [number isEqualToNumber:[NSDecimalNumber notANumber]])
{
return NO;
}
return YES;
}
В качестве альтернативы, вы можете выполнить проверку, когда пользователь закончит ввод текста, в –textFieldShouldReturn:
, – textFieldShouldEndEditing:
или – textFieldDidEndEditing:
по желанию.