Используя 'textField:shouldChangeCharactersInRange': как я получаю текст включая текущий введенный символ?

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

- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {    
  if (theTextField == textField1){    
     [textField2 setText:[textField1 text]];    
  }
}

Однако вывод, который я наблюдаю, является этим...

textField2 равняется "12", когда textField1 равняется "123"

textField2 равняется "123", когда textField1 "1234"

... когда то, что я хочу:

textField2 равняется "123", когда textField1 равняется "123"

textField2 "1234", когда textField1 "1234"

Что я делаю неправильно?

111
задан Mark Amery 8 May 2014 в 23:04
поделиться

3 ответа

-shouldChangeCharactersInRange вызывается до того, как текстовое поле действительно изменит свой текст, поэтому вы получаете старое текстовое значение. Чтобы получить текст после обновления, используйте:

[textField2 setText:[textField1.text stringByReplacingCharactersInRange:range withString:string]];
269
ответ дан 24 November 2019 в 02:56
поделиться

Вместо использования UITextFieldDelegate попробуйте использовать «Редактирование изменено. " событие UITextField.

24
ответ дан 24 November 2019 в 02:56
поделиться

Это тот код, который вам нужен,

if ([textField isEqual:self.textField1])
  textField2.text = [textField1.text stringByReplacingCharactersInRange:range withString:string];
5
ответ дан 24 November 2019 в 02:56
поделиться