1

重複の可能性:
UIKeyboardTypeDecimalPad の小数点は数学計算で使用できません

入力にUIKeyboardTypeDecimalPadを使用しているiPhoneアプリがありますが、アプリケーションのローカライズを開始するまで問題なく機能していましたが、現在直面している問題は、言語がフランス語またはドイツ語に切り替えられたときに、キーパッドが.ピリオド ( ) からコンマ ( ) に変わります,

現在、このコードを実行して、複数の小数点の入力を制限しています。つまり、12.4.4 このコードでは、12.4 のみを入力できます。

これは問題なく動作しますが、コンマをチェックし、コンマがある場合はユーザー入力を計算用に変換する必要もあります。

コンマとピリオドの両方のキーパッドでの入力を制限するより良い方法はありますか?

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{


NSString *currentText = textField.text;


if ([currentText rangeOfString:@"." options:NSBackwardsSearch].length == 0) {
    return YES;
} else {
    if ([string rangeOfString:@"." options:NSBackwardsSearch].length == 0) {
        return YES;
    } else {
        return NO;
    }

}

return NO;

}

ありがとうアーロン

4

1 に答える 1

2

私はこれを解決することができました。これにより、数値が10進数形式であり、またはを受け入れることが検証されます。

アーロン

  - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];

    NSNumber* candidateNumber;

    NSString* candidateString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    range = NSMakeRange(0, [candidateString length]);

    [numberFormatter getObjectValue:&candidateNumber forString:candidateString range:&range error:nil];

    if (([candidateString length] > 0) && (candidateNumber == nil || range.length < [candidateString length])) {
        [numberFormatter release];
        return NO;
    }
    else {
        [numberFormatter release];
        return YES; 
    } 
}
于 2012-10-05T11:26:19.417 に答える