您正在错误地看待这个问题。当您使用十进制小键盘设置文本字段时,小键盘将根据用户的区域设置显示句点或逗号。这就是你想要的。一些用户希望输入十进制数字,3.14
而其他用户希望输入3,14
.
运行设置应用程序并转到常规,然后转到国际。查看区域格式设置。这决定了用户的区域设置以及是否使用句点或逗号。您的设备和模拟器必须使用不同的区域格式设置进行设置。
这是最后一部分 - 一旦用户输入一个十进制值,您必须使用 anNSNumberFormatter
将输入到文本字段中的字符串正确转换为NSNumber
. 将NSNumberFormatter
根据用户的区域设置正确处理数字中的逗号或句点。此外,当您需要向用户显示数字时,请使用 anNSNumberFormatter
将数字转换为字符串。这将确保数字以用户期望的格式显示给用户。
在用户输入值期间,请勿将逗号替换为句点。它会使用户感到困惑。
更新
您可以在shouldChangeCharactersInRange
委托方法中做的一件事是确保输入的所有字符都是有效的数字字符。我不会做诸如检查两个小数分隔符之类的事情。只需让用户输入与数字相关的字符即可。
当用户尝试离开文本字段时,您进行最终验证。例子:
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *val = [formatter numberFromString:textField.text];
return val != nil; // don't let the user leave if text is not a valid number
}