我在我的应用程序中用双打做一些数学事情。这在模拟器上效果很好,它使用句点来制作小数。当我在我的 iPhone 上运行它时,我有一个逗号。当我使用逗号时,它不会做任何事情。
我该如何修改,以便将逗号视为句点或更改键盘(我使用的是小数点),以便在所有语言中输入句点?
我在我的应用程序中用双打做一些数学事情。这在模拟器上效果很好,它使用句点来制作小数。当我在我的 iPhone 上运行它时,我有一个逗号。当我使用逗号时,它不会做任何事情。
我该如何修改,以便将逗号视为句点或更改键盘(我使用的是小数点),以便在所有语言中输入句点?
正如@propstm 所说,不同的地区/语言环境使用不同的数字分隔符。 NSScanner是用于将文本转换为数字类型的标准框架类,并考虑了用户当前区域设置的所有约定。您应该将它用于从文本输入到双精度的转换。
但是,仅用句点替换逗号是不够的,因为例如,在美国语言环境中,1,234.56 美元是一种货币的有效值。如果您只是用句点替换逗号,这将变得无效。
使用 NSScanner。这是它专门设计的。
编辑
您也可以考虑将 anNSNumberFormatter
与您的UITextField
. 它可以真正帮助验证用户输入,甚至在您使用NSScanner
. 检查出来。
使用示例NSNumberFormatter
:
将您的 viewController 设置为 UITextField 的委托,并添加此方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *proposedNewValue = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
return (nil != [numberFormatter numberFromString:resultString]);
}
这将使该字段不会接受格式不正确的数字。您也可以使用此方法NSNumber
从文本中获取。
要使用NSScanner
您可以执行以下操作:
- (IBAction)doStuff:(id)sender
{
NSString* entry = textField.text;
double value = 0;
if ([[NSScanner scannerWithString:entry] scanDouble: &value])
{
// If we get here, the scanning was successful
}
else
{
// Scanning failed -- couldn't parse the number... handle the error
}
}
HTH。
根据语言设置,有时您会看到逗号有时是句点。
对于您的数学,请接受用户输入,然后对值进行验证,以确保它们为您的方程式使用正确的格式。可能保存逗号或句点的首选项,然后重新格式化输出,以便用户熟悉格式。
- (void)validateUserInputs{
for(UIControl *control in self.view.subviews){
if([control isMemberOfClass:[UITextField class]]){
NSString *convertedText = [[(UITextField *)control text] stringByReplacingOccurrencesOfString:@"," withString:@"."];
[(UITextField *)control setText:convertedText];
}
}
for(UIControl *control in self.view.subviews){
if([control isMemberOfClass:[UITextField class]]){
NSLog(@"Converted String Value: %@", [(UITextField *)control text]);
}
}
}