- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
if (string.length == 0) {
return YES;
}
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber* candidateNumber;
NSString* candidateString = [textField.text stringByReplacingCharactersInRange:range withString:string];
range = NSMakeRange(0, [candidateString length]);
[numberFormatter getObjectValue:&candidateNumber forString:candidateString range:&range error:nil];
if (([candidateString length] > 0) && (candidateNumber == nil || range.length < [candidateString length])) {
return NO;
}
else
{
return YES;
}
嗨,使用此代码,我只能在文本字段中插入十进制值。 小数点分隔符是逗号“,” 如何将其更改为点“。” ?
由于
答案 0 :(得分:4)
有一个名为Localization
的小东西。每种语言都使用不同的字符作为小数分隔符。其中英语使用小数点,其他语言使用逗号(或其他字符)。
创建NSNumberFormatter
时,它使用系统区域设置(NSLocale
实例)来决定小数分隔符(以及分组分隔符和其他内容)。
如果您想要一个固定的行为,那么只需使用[NSNumberFormatter setLocale:]
另请注意,有一种特殊的语言环境
[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]
,它定义了一个特殊的区域设置,无法通过用户设置进行更改,并始终相同。
在这种情况下,使用NSNumberFormatter
不是最好的主意。这是您想要使用正则表达式的情况之一。