2013-02-16 21 views
1

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

感谢

编辑:

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

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

否则逗号写入,并在下一个字符,它被替换

+0

这是一种可怕的用户体验。请为了您的客户,看看我的答案。 – rmaddy 2013-02-16 18:31:27

回答

4

您可以使用

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

如:

NSString *str = myTextfield.text; 

str = [str stringByReplacingOccurrencesOfString:@"." 
            withString:@","]; 

自定义键盘看到这个link

编辑 您可以检查字符串中的这个功能,如果它的输入@ “”然后你可以用@改变它“”

// 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]; 
    } 
+0

对不起,请看这个问题的更改 – Vins 2013-02-16 18:08:02

+0

@Vins查看更新的答案。[另请参阅](http://stackoverflow.com/questions/10363856/iphone-how-to-get-uitextfields-text-while-typing)。 – HDdeveloper 2013-02-16 18:24:38

+3

此代码不起作用。如果手动更新文本字段的文本,则必须从'shouldChangeCharactersInRange'返回'NO'。如果您希望框架继续并且使用替换字符串更新文本字段,则只返回“YES”。 – rmaddy 2013-02-16 18:24:58

2

你被错误地看这个问题。当您使用小数键盘设置文本字段时,小键盘将根据用户的区域设置显示句点或逗号。这是你想要的。有些用户会希望像3.14输入十进制数,而其他用户将要进入他们的3,14

运行设置应用程序和去一般,那么国际。看看区域格式设置。这决定了用户的区域设置以及是否使用了句点或逗号。您的设备和模拟器必须使用不同的区域格式设置进行设置。

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

不要在用户输入值的过程中用句点替换逗号。它会混淆用户。

更新

一件事,你可以在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 
} 
+0

好的,很好,但你能为我做一个快速的例子吗?与我的例子有关?谢谢 – Vins 2013-02-16 18:42:21

+0

对不起,是什么样的例子?我说你不需要对'shouldChangeCharactersInRange'委托做任何事情。只需让用户输入一个逗号或句点的数字,因为它显示在小数键盘上。 – rmaddy 2013-02-16 18:45:43

+0

,因为我确定要放一个点。所以我在'if([textFieldString rangeOfString:@“。”“。location == NSNotFound){//不包含点 return YES; } else {//包含点 if([string isEqualToString:@“。”]){ return NO; } }' – Vins 2013-02-16 18:51:09

1

Swift 3。1

1)更换与点(逗号(,)。)

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 
}