Objective C textfield formatter逗号每两个数字

时间:2016-05-01 09:40:49

标签: ios objective-c

我想在输入时在uitextfield中为每两个数字添加逗号,但我的代码不起作用,而且我不知道我在哪里犯了错误。

创意:当用户输入23456789时,请在他们重新输入时将其格式化为23,45,67,89

这是我的代码:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init] ;
if([string length]==0)
{
    [formatter setGroupingSeparator:@"-"];
    [formatter setGroupingSize:4];
    [formatter setUsesGroupingSeparator:YES];
    [formatter setSecondaryGroupingSize:2];
    NSString *num = textField.text ;
    num= [num stringByReplacingOccurrencesOfString:@"-" withString:@""];
    NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]];
    textField.text=str;
    NSLog(@"%@",str);
    return YES;
}
else {
    [formatter setGroupingSeparator:@","];
    [formatter setGroupingSize:2];
    [formatter setUsesGroupingSeparator:YES];
    [formatter setSecondaryGroupingSize:2];
    NSString *num = textField.text ;
    if(![num isEqualToString:@""])
    {
        num= [num stringByReplacingOccurrencesOfString:@"," withString:@""];
        NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]];
        textField.text=str;
    }

    //NSLog(@"%@",str);
    return YES;
}

当我输入时,数字总是在插入逗号之前显示3个字符,如1,23,44,567

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好吧,似乎setGroupingSize中存在一个错误,要解决它,你应该改变

[formatter setGroupingSize:2] 

[formatter setGroupingSize:1]

这解决了眼前的问题。但是您的代码中还存在其他一些问题。你想使用NumberWithDouble和doubleValue,还是应该使用整数?如何处理负数?有效输入的范围是多少?如果用户尝试编辑文本的中间部分会发生什么?当字符串长度为0时,为什么有不同的格式化程序?这真的是收集用户输入的最佳方式吗