1

我发现了一个烦人的问题。我有一个带有数字十进制键盘的文本字段,但模拟器有重点,设备有逗号(都是 6.1)。我该怎么办,如果你插入一个逗号,这会被一个点代替?

谢谢

编辑:

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

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

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

4

3 回答 3

4

您可以使用

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

例如:

NSString *str = myTextfield.text;

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

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

编辑 您可以检查在此函数中输入的字符串以及是否为@"。" 然后你可以用@","来改变它

    // 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];
    }
于 2013-02-16T17:58:41.013 回答
2

您正在错误地看待这个问题。当您使用十进制小键盘设置文本字段时,小键盘将根据用户的区域设置显示句点或逗号。这就是你想要的。一些用户希望输入十进制数字,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
}
于 2013-02-16T18:20:43.937 回答
1

斯威夫特 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
}
于 2017-05-17T17:33:10.230 回答