iOS在uitextfield中replacechar

我发现一个恼人的问题。 我有一个数字十进制键盘的文本框,但模拟器有点,该设备有逗号(均为6.1)。 我怎么办,如果你插入一个逗号,这是由一个点代替?

谢谢

编辑:

这个过程,必须在这个方法中实时进行

- (BOOL) textField: (UITextField *) theTextField shouldChangeCharactersInRange: (NSRange) range ReplacementString: (NSString *) string 

否则逗号被写入,并在下一个字符处被replace

您可以使用

 - (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement 

例如:

 NSString *str = myTextfield.text; str = [str stringByReplacingOccurrencesOfString:@"." withString:@","]; 

对于自定义键盘请参阅此链接

编辑你可以检查在这个函数中input的string,如果它的@“。” 那么你可以用@改变它,“”

  // using something this - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; [self updateTextLabelsWithText: newString]; NSLog(@"Changed Str: %@",newString); return YES; } -(void)updateTextLabelsWithText:(NSString *)str { str = [str stringByReplacingOccurrencesOfString:@"." withString:@","]; [myTextFiled setText:str]; } 

您正在错误地查看此问题。 当您使用小数点键盘设置文本字段时,键盘将根据用户的区域设置显示句点或逗号。 这是你想要的。 有些用户会希望input像3.14这样的十进制数字,而其他用户则希望以3.14input。

运行设置应用程序,然后转到常规,然后国际。 看看区域格式设置。 这决定了用户的语言环境以及是否使用句号或逗号。 您的设备和模拟器必须设置不同的区域格式设置。

这是最后一部分 – 一旦用户input十进制值,您必须使用NSNumberFormatter将input到文本字段的string正确转换为NSNumberNSNumberFormatter将根据用户的语言环境正确处理数字中的逗号或句点。 此外,当您需要向用户显示该号码时,请使用NSNumberFormatter将该号码转换为string。 这将确保号码以用户所期望的格式显示给用户。

在用户input值的过程中,请不要用逗号replace逗号。 这会混淆用户。

更新

您可以在shouldChangeCharactersInRange委托方法中做的一件事是确保input的所有字符都是有效的数字字符。 我不会做像检查两个小数点分隔符字符的事情。 只要让用户键入数字相关的字符。

当用户试图离开文本字段时,您将执行最后的validation。 例:

 - (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 } 

Swift 3.1

1)用点(。)replace逗号(,)

2)只允许一个点(。)

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { let dotsCount = textField.text!.componentsSeparatedByString(".").count - 1 if dotsCount > 0 && (string == "." || string == ",") { return false } if string == "," { textField.text! += "." return false } return true }