2013-04-20 87 views
0

我想限制在UITextField中輸入的數字。這裏是我的代碼限制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.12345678.8代替

我想達到什麼樣的

1)用戶可以小數點後

小數& 2個位數之前只輸入MAX_NO_OF_DIGITS_BEFORE_DECIMAL我不明白爲什麼過去8在此重複。有誰能夠幫助我 ?

在此先感謝。

回答

1

首先,將記錄添加到每個步驟以查看發生了什麼或調試。

問題是您正在修改字符串(以創建newString變量)。然後,您將句號添加到最後並將其設置爲文本字段的新值。然後你回來了(你的後面的檢查不使用新的文本字段值)。因此,您添加'8'和期間,然後要求框架添加'8'。

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; 

}

嘗試
相關問題