shouldChangeCharactersInRange, принимающая только одну цифру за раз - PullRequest
1 голос
/ 07 февраля 2012

Я пытаюсь получить общую стоимость после умножения цены и количества на текстовое поле. Я не получаю значение, когда количество равно 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 ]

1 голос
/ 07 февраля 2012

Вы используете для замены только значение replaceString, которое является последним набранным символом, а не всю строку целиком.

Так что, если я наберу '1', функция использует 1 в качествезначение, а затем, если я наберу '0', чтобы получить 10, ваша функция использует только '0' в качестве значения.

Вам нужно получить весь текст текстового поля amountText и использовать его.Вы можете получить это, взяв textField.text, а затем заменив указанный диапазон на replaceString.

Если честно, гораздо проще просто зарегистрироваться на UITextFieldTextDidChangeNotification вместо использования метода textfield:shouldChangeCharactersInRange:replacementString:.

Подробнее см. в этом ответе .

0 голосов
/ 07 февраля 2012
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

этот метод делегата вызывается всякий раз, когда пользователь вводит новый символ в текстовое поле, а строковый объект будет содержать только последний набранный символ. поэтому вместо использования (NSString *)string используйте textField.text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...