Я бы всегда предпочел регулярное выражение некоторому правилу на основе кода для таких сценариев.
Чтобы ограничить один десятичный знак и один символ после него, используйте ниже;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
// Only allow one decimal point and 1 digit after it
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSString *expression = @"^[0-9]$*((\\.|,)[0-9]{0,1})?$";
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:&error];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString options:0 range:NSMakeRange(0, [newString length])];
return numberOfMatches != 0;
return YES;
}
Приведенный выше код гарантирует, что текстовое поле содержит только одну десятичную точку и только один символ после нее.
Вы можете играть с этим регулярным выражением и создавать правила на основе ваших требований.