UIKeyboardTypeDecimalPad限制小数点和处理本地化

时间:2012-10-05 07:05:41

标签: objective-c ios localization

  

可能重复:
  Decimal point in UIKeyboardTypeDecimalPad can’t be used in mathematical calculation

我有一个iPhone应用程序,我们使用UIKeyboardTypeDecimalPad作为输入,在我们开始本地化应用程序之前一直工作正常,我们现在面临的问题是当语言切换到法语或德语时十进制键盘上的点从句号(.)变为逗号(,)。

我们目前正在运行此代码以限制输入多个小数点,即12.4.4,使用此代码只允许输入12.4

这样可以正常工作,但现在我们还需要检查逗号并将用户输入转换为我们的计算(如果有逗号)

是否有更好的方法来限制键盘输入的逗号和句号?

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{


NSString *currentText = textField.text;


if ([currentText rangeOfString:@"." options:NSBackwardsSearch].length == 0) {
    return YES;
} else {
    if ([string rangeOfString:@"." options:NSBackwardsSearch].length == 0) {
        return YES;
    } else {
        return NO;
    }

}

return NO;

}

谢谢Aaron

1 个答案:

答案 0 :(得分:2)

我已设法解决这个问题,这将验证该数字是十进制格式并接受,或。

亚伦

  - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [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])) {
        [numberFormatter release];
        return NO;
    }
    else {
        [numberFormatter release];
        return YES; 
    } 
}