カスタム NumberPad を作成しています
if (([[[UIDevice currentDevice] systemVersion] doubleValue] >= 4.1)) {
inputBoxTextField.keyboardType = UIKeyboardTypeDecimalPad;
}
私の問題は、ドットを一度だけ表示したいということです。
前もって感謝します。
カスタム NumberPad を作成しています
if (([[[UIDevice currentDevice] systemVersion] doubleValue] >= 4.1)) {
inputBoxTextField.keyboardType = UIKeyboardTypeDecimalPad;
}
私の問題は、ドットを一度だけ表示したいということです。
前もって感謝します。
ユーザーがドットを 1 つだけ入力できるようにする場合は、デリゲート メソッドを使用できます。
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
そして、textField に既にドットが含まれているかどうかを確認します。
- (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; } }
次のコードを使用します。私にとっては完璧に機能し、コードも少なくて済みます。
- (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;
}