0

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が繰り返される理由がわかりません。誰でも私を助けることができますか?

前もって感謝します。

4

2 に答える 2

3

以下のコードを試してください

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

{

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

// Check if we have 3 digits before decimal points
int maxNoOfDigitsBeforeDecimal = 3;
// Check if we have 2 digits after decimal points
int maxNoOfDigitsAfterDecimal = 2;

// Check if we have no decimal point yet and more than 3 digits are entered
NSArray  *arrayOfString = [newString componentsSeparatedByString:@"."];

if (([arrayOfString count] == 1 ) && ([newString length] > maxNoOfDigitsBeforeDecimal))
{
    return NO;
}


 // Check if we have only 1 decimal point
if ([arrayOfString count] > 2 )
    return NO;

// Check if we have only 2 digits after decimal point
if([arrayOfString count] >= maxNoOfDigitsAfterDecimal)
{
    NSString *sepStr = [NSString stringWithFormat:@"%@",[arrayOfString objectAtIndex:1]];
    return !([sepStr length] > maxNoOfDigitsAfterDecimal);
}


return YES;

}

于 2015-02-10T11:04:55.023 に答える