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

    if (string.length == 0) {
        return YES;
    }

    [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])) {
        return NO;
    }
    else
    {
        return YES;
    }

こんにちは、このコードでは、テキスト フィールドに 10 進数の値しか挿入できません。小数点記号はカンマ "," ドットに変更するにはどうすればよいですか "." ?

ありがとう

4

1 に答える 1

4

と呼ばれる小さなものがありLocalizationます。すべての言語は、異なる文字を小数点記号として使用します。英語では小数点を使用しますが、他の言語ではコンマ (またはその他の文字) を使用します。

を作成するNSNumberFormatterと、システム ロケール (NSLocaleインスタンス) を使用して、小数点記号 (およびグループ化記号など) が決定されます。固定の動作が必要な場合は、次を使用して別のロケールを設定するだけです[NSNumberFormatter setLocale:]

また [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]、ユーザー設定によって変更できず、常に同じである特別なロケールを定義する特別な種類のロケールがあることにも注意してください。

この場合、 a を使用するのNSNumberFormatterは最善の方法ではありません。これは、正規表現を使用する場合の 1 つです。

于 2012-10-29T10:42:28.493 に答える