shouldChangeCharactersInRange在时间只取一个数字

问题描述:

我试图在将文本字段中的价格和数量相乘后得到总值。当数量为10或有任何两个或三个数字时,我没有获得价值。这种方法在时间上只有一个字符。shouldChangeCharactersInRange在时间只取一个数字

- (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; 

    } 

您只使用replacementString值进行计算,它是最后输入的字符,而不是整个字符串的整个字符串。所以如果我输入'1',那么函数使用1作为值,然后如果我输入'0'来使得10,你的函数只使用'0'作为值。

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

说实话,虽然它更容易只是为UITextFieldTextDidChangeNotification注册,而不是使用textfield:shouldChangeCharactersInRange:replacementString:方法很多。详细请参照this answer

+0

我没有得到你适当的。当我通过链接提供的答案时,通知如何对我有帮助。我怎么能用这个工作。 – Ketan 2012-02-07 10:45:01

+0

它会为您提供用户每次按键时键入的全文,而不仅仅是他们键入的最后一个字符。 – 2012-02-07 11:05:41

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

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