1

迷惑な問題を見つけました。数値の10進キーボードを備えたテキストフィールドがありますが、シミュレーターにはポイントがあり、デバイスにはコンマがあります(両方とも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

あなたはこの問題を間違って見ています。Decimalキーパッドを使用してテキストフィールドを設定すると、ユーザーのロケールに応じて、キーパッドにピリオドまたはコンマが表示されます。これはあなたが望むものです。一部のユーザーは10進数3.14を入力したいのに対し、他のユーザーは10進数をとして入力したいでしょう3,14

設定アプリを実行し、[一般]、[インターナショナル]の順に移動します。リージョンフォーマットの設定を確認してください。これにより、ユーザーのロケールと、ピリオドまたはコンマのどちらを使用するかが決まります。デバイスとシミュレーターは、異なるリージョンフォーマット設定でセットアップする必要があります。

最後の部分は次のとおりです。ユーザーが10進値を入力したら、を使用NSNumberFormatterして、テキストフィールドに入力された文字列を。に適切に変換する必要がありますNSNumber。はNSNumberFormatter、ユーザーのロケールに基づいた数値のコンマまたはピリオドを適切に処理します。また、ユーザーに数値を表示する必要がある場合は、を使用しNSNumberFormatterて数値を文字列に変換します。これにより、ユーザーが期待する形式で番号がユーザーに表示されます。

ユーザーが値を入力するときに、コンマをピリオドに置き換えないでください。それはユーザーを混乱させるでしょう。

アップデート

デリゲートメソッドで実行できることの1つは、shouldChangeCharactersInRange入力されているすべての文字が有効な数字であることを確認することです。小数点記号2文字をチェックするようなことはしません。ユーザーに数字に関連する文字を入力させるだけです。

ユーザーがテキストフィールドを離れようとしたときに、最終的な検証を行います。例:

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

Swift 3.1

1)のコンマ(、)をドット(。)に置き換えます

2)ドットを1つだけ許可します(。)

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 に答える