2012-02-07 8 views
1

가격과 수량에 텍스트 필드를 곱한 후 총 가치를 얻으려고합니다. 수량이 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; 

    } 

답변

1

전체 문자열 전체가 아니라 마지막으로 입력 한 문자 인 계산에 replacementString 값만 사용합니다.

그래서 '1'을 입력하면 함수는 1을 값으로 사용하고 '0'을 입력하여 10을 입력하면 함수는 '0'만 값으로 사용합니다.

수량 텍스트 필드의 전체 텍스트를 가져와 사용해야합니다. textField.text를 가져 와서 지정된 범위를 replacementString으로 바꾸면됩니다.

textfield:shouldChangeCharactersInRange:replacementString: 메서드를 사용하는 대신 UITextFieldTextDidChangeNotification에 등록하는 것이 훨씬 쉽지만 솔직히 말해서 사실입니다.

자세한 내용은 this answer을 참조하십시오.

+0

을 올바르게 사용하지 마십시오. 링크가 제공하는 답변을 통해 나에게 알림이 도움이되는 방법. 어떻게이 모든 일을 할 수 있을까요? – Ketan

+0

입력 한 마지막 문자뿐만 아니라 키를 누를 때마다 사용자가 입력 한 전체 텍스트를 제공합니다. –

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

이 위임 메서드는 사용자가 텍스트 필드에 새 문자를 입력 할 때마다 호출되며 문자열 개체에는 마지막 입력 된 문자 만 포함됩니다. 그래서 (NSString *)string 대신에 textField.text

관련 문제