1

可能重复:
UIKeyboardTypeDecimalPad 中的小数点不能用于数学计算

我有一个 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;

}

谢谢亚伦

4

1 回答 1

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; 
    } 
}
于 2012-10-05T11:26:19.417 回答