UITextFieldに入力する桁数を制限したい。これが私のコードです
#define MAX_NO_OF_DIGITS_BEFORE_DECIMAL 8
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
switch (textField.tag)
{
case BUY_ITEM_TEXTFIELD_TAG:
{
if (![textField.text length]>0) {
textField.text = [CURRENCY_TYPE stringByAppendingFormat:@"%@",self.buyTextField.text];
}
}
break;
case BID_INCREMENT_TEXTFIELD_TAG:
{
if (![textField.text length]>0) {
textField.text = [CURRENCY_TYPE stringByAppendingFormat:@"%@",self.bidTextField.text];
}
}
break;
case STARTING_BID_TEXTFIELD_TAG:
{
if (![textField.text length]>0) {
textField.text = [CURRENCY_TYPE stringByAppendingFormat:@"%@",self.startingBidTextField.text];
}
}
break;
case SHIPPING_CHARGES_TEXTFILED:
{
if (![textField.text length]>0) {
textField.text = [CURRENCY_TYPE stringByAppendingFormat:@"%@",self.chargesTextField.text];
}
}
break;
default:
break;
}
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
// Check if we have 8 digits before decimal points
NSString *tempStr = [newString stringByReplacingOccurrencesOfString:CURRENCY_TYPE withString:@""];
if ([tempStr length]==MAX_NO_OF_DIGITS_BEFORE_DECIMAL)
{
// Check if we have only 1 decimal point
NSArray *arrayOfString = [newString componentsSeparatedByString:@"."];
if ([arrayOfString count] > 2 )
{
return NO;
}
else {
textField.text = [NSString stringWithFormat:@"%@%@%@",CURRENCY_TYPE,tempStr,@"."];
}
}
// Check if we have only 1 decimal point
NSArray *arrayOfString = [newString componentsSeparatedByString:@"."];
if ([arrayOfString count] > 2 )
{
return NO;
}
// Check if we have only 2 digits after decimal point
if([arrayOfString count]>=2)
{
NSString *sepStr=[NSString stringWithFormat:@"%@",[arrayOfString objectAtIndex:1]];
return !([sepStr length]>2);
}
return YES;
}
しかし、私の問題は、 12345678 を入力すると、小数点が 8 の後に配置され、再び 8 が配置されるため、出力が次のようになる12345678.8
ことです。12345678.
私が達成したいことは
1) ユーザーは、小数点の前に MAX_NO_OF_DIGITS_BEFORE_DECIMAL および小数点以下の 2 桁のみを入力できます。
これで最後の8が繰り返される理由がわかりません。誰でも私を助けることができますか?
前もって感謝します。