shouldChangeCharactersInRange只占一位数

时间:2012-02-07 10:04:54

标签: iphone ios

我想在将价格和数量乘以文本字段后获得总价值。当数量为10或者有两个或三个数字时,我没有得到价值。这种方法一次只需要一个字符。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range    
replacementString:(NSString *)string
{
if(textField == quantityText)
{
    NSCharacterSet *charactersToRemove =[[ NSCharacterSet alphanumericCharacterSet ]  
 invertedSet];
    NSRange inRange=[string rangeOfCharacterFromSet:charactersToRemove];
    if(inRange.location != NSNotFound)
    {
        quantityText.text =[ quantityText.text 
  stringByTrimmingCharactersInSet:charactersToRemove ];
        return NO;
    }
    if ([textField text] )
    {
        float quantity = [string floatValue];
        float price = [[priceLabel text] floatValue];
        float h = quantity * price;

        amountText.text=[NSString stringWithFormat:@"%f",h];

    } 
    else
    {
        return NO; 
    }
 }    
return YES;

  }

2 个答案:

答案 0 :(得分:1)

您只使用replacementString值进行计算,这是输入的最后一个字符,而不是整个字符串。

所以如果我输入'1'然后函数使用1作为值,那么如果我输入'0'来生成10,你的函数只使用'0'作为值。

您需要获取quantityText文本字段的全文并使用它。你可以通过使用textField.text然后用replacementString替换指定的范围来获得它。

老实说,虽然注册UITextFieldTextDidChangeNotification而不是使用textfield:shouldChangeCharactersInRange:replacementString:方法要容易得多。

有关详细信息,请参阅this answer

答案 1 :(得分:0)

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

只要用户在文本字段中键入新字符并且字符串对象仅包含最后输入的字符,就会调用此委托方法。所以不要使用(NSString *)string使用textField.text