iPhoneでカスタム番号パッドを使用してシングルドットを表示する方法は?

StackOverflow https://stackoverflow.com/questions/7370192

  •  28-10-2019
  •  | 
  •  

質問

カスタム番号パッドを作成しています

if (([[[UIDevice currentDevice] systemVersion] doubleValue] >= 4.1)) {
    inputBoxTextField.keyboardType = UIKeyboardTypeDecimalPad;
}

私の問題は、ドットを一度だけ表示したいということです。

前もって感謝します。

役に立ちましたか?

解決 2

- (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])) {

    return NO;
}
else {
    return YES; } }

他のヒント

ユーザーが1つのドットのみを入力できるようにしたい場合は、Delegateメソッドを使用できます

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

また、テキストフィールドにすでにドットが含まれているかどうかを確認してください。

次のコードを使用します。私にとっては完璧に機能し、コードが少なくなります。

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

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    NSString *decimalSymbol = [numberFormatter decimalSeparator];

    if(([textField.text rangeOfString:decimalSymbol].location != NSNotFound) &&
       ([string rangeOfString:decimalSymbol].location != NSNotFound)) {
        return NO;
    }
return YES; 
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top