IMO лучший способ для достижения вашей цели - это отображение цифровой клавиатуры, а не обычной клавиатуры. Это ограничивает какие ключи доступны пользователю. Это устраняет необходимость выполнять проверку и, что более важно, предотвращает ошибку пользователя. Цифровая клавиатура также намного удобнее для ввода цифр, потому что клавиши значительно больше.
В конструкторе интерфейса выберите UITextField, перейдите в инспектор атрибутов и измените «Тип клавиатуры» на «Десятичная клавиатура».

Это заставит клавиатуру выглядеть так:

Осталось только убедиться, что пользователь не вводит в двух десятичных разрядах. Вы можете сделать это, пока они редактируют. Добавьте следующий код в ваш контроллер представления. Этот код удаляет второе десятичное место после его ввода. Для пользователя это выглядит так, как будто 2-й знак после запятой никогда не появлялся.
- (void)viewDidLoad
{
[super viewDidLoad];
[self.textField addTarget:self
action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];
}
- (void)textFieldDidChange:(UITextField *)textField
{
NSString *text = textField.text;
NSRange range = [text rangeOfString:@"."];
if (range.location != NSNotFound &&
[text hasSuffix:@"."] &&
range.location != (text.length - 1))
{
// There's more than one decimal
textField.text = [text substringToIndex:text.length - 1];
}
}