无法设置逗号 NSNumberFormater

Can't set comma NSNumberFormater

如果可以,请帮助我。

我为我的文本字段创建了格式器,然后在 ViewController 我试图设置它:

OnlyNeddedNumbers *numbersOnly = [[OnlyNeddedNumbers alloc] init];
[self.betAmount setFormatter:numbersOnly];

但是当我启动应用程序时,我无法设置点或逗号。目的是允许用户在 NSTextField

中仅设置双精度值
@interface OnlyNeddedNumbers : NSNumberFormatter

@end


@implementation OnlyNeddedNumbers

- (BOOL)isPartialStringValid:(NSString*)partialString newEditingString:(NSString**)newString errorDescription:(NSString**)error
{

    if([partialString length] == 0) {
        return NO;
    }

    NSString *scanString = [NSString stringWithFormat:@"%@", [partialString stringByReplacingOccurrencesOfString:@"," withString:@""]];
    scanString = [scanString stringByReplacingOccurrencesOfString:@"." withString:@""];

    NSScanner* scanner = [NSScanner scannerWithString:scanString];

    if(!([scanner scanInt:0] && [scanner isAtEnd])) {
        NSBeep();
        return NO;
    } else if ([scanString isEqualToString:@"0"]) {
        NSBeep();
        return NO;
    }

    return YES;
}

@end

您不需要特殊的子类。你的目标是

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setDecimalSeparator:@","];
[formatter setMinimum:@(-100000)];
[formatter setMaximum:@(100000)];

当您设置最小值和最大值时,它会自动验证该值。不需要其他代码。

请记住 0.00 也是一个有效的双精度值。 您还可以测试值 [object doubleValue] -> 我认为这是正确的方法。如果用户插入文本,那么它将被转换为双精度数字 0。