あなたはこの問題を間違って見ています。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
}