1
- (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;
    }

嗨,使用此代码,我只能在文本字段中插入十进制值。小数点分隔符是逗号“”,如何将其更改为点“。” ?

谢谢

4

1 回答 1

4

有一个小东西叫Localization。每种语言都使用不同的字符作为小数分隔符。在英语使用小数点的地方,其他语言使用逗号(或其他字符)。

当您创建一个NSNumberFormatter时,它使用系统语言环境(NSLocale实例)来决定小数分隔符(以及分组分隔符和其他东西)。如果您想要一个固定的行为,那么只需使用设置不同的语言环境[NSNumberFormatter setLocale:]

另请注意,有一种特殊的语言环境 [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]定义了一种特殊的语言环境,该语言环境不能由用户设置更改并且始终相同。

在这种情况下,使用 aNSNumberFormatter不是最好的主意。这是您想要使用正则表达式的情况之一。

于 2012-10-29T10:42:28.493 回答