знать о печати символов в текстовом поле

Я хочу знать о печати символов в UITextField

когда я начинаю вводить текст в текстовое поле, он вводит идеально в поле, но в NSLog он сначала показывает неправильно, он ничего не отображает. для второго символа он отображает первый символ в консоли. Я хочу знать, почему это должно происходить, иначе я видел оба символа в текстовом поле.

введите описание изображения здесь

это мой код метода делегатов текстового поля

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSLog(@"print %@", textField.text);
    return YES;
}
  // this is my console output
  2012-01-04 12:40:41.736 Demo[1982:f803] print 
  2012-01-04 12:40:43.497 Demo[1982:f803] print h

person Hiren    schedule 04.01.2012    source источник


Ответы (6)


На момент вызова - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string значения вашего текстового поля еще не были изменены, поэтому это вполне нормальный результат.

Вы должны взять новых персонажей из replacementString:(NSString *)string.

person Geoffroy    schedule 04.01.2012
comment
спасибо большое, теперь это ясно в моей голове. Я хочу узнать еще кое-что о текстовом поле. когда я удаляю символы в текстовом поле, тогда какой метод делегата вызывается из текстового файла? - person Hiren; 04.01.2012
comment
Это тоже следует называть, если я не ошибаюсь - person Geoffroy; 04.01.2012
comment
тот же метод, с заменой строки для диапазона ›0 - person bshirley; 04.01.2012

Это правильное поведение, поскольку текущее значение textField.text не изменяется, пока этот метод не вернет YES. Если вы хотите, чтобы в NSLog отображалась та же строка, которую вы видите, вам необходимо создать ее, изменяя символы «строка» в диапазоне «диапазон». Вот что произойдет с textField.text, когда вы вернете YES, и что не произойдет, если вы вернете NO.

person Gabriel    schedule 04.01.2012
comment
спасибо за ваш ответ .. это тоже полезно - person Hiren; 04.01.2012

Это не так. Это свойство метода shouldChangeCharacters. Это может помочь: Получение значения UITextField в виде нажатий клавиш введены?

person utsabiem    schedule 04.01.2012

Может быть, этот метод вызывается перед введенным символом. Попробуйте вызвать NSLog после некоторой задержки с помощью селектора.

person Padavan    schedule 04.01.2012

_should_... означает, что это еще не произошло

использования:

[textField.text stringByReplacingCharactersInRange:range withString:string];
person bshirley    schedule 04.01.2012

Попробуйте NSLog это:

[textField.text stringByReplacingCharactersInRange:range withString:string];
person Mat    schedule 04.01.2012