UITextField: не может вводить текст, но смайлы, копирование / вставка и обратное пространство в порядке

Мне кажется это странным, я создал свой класс, унаследованный от UIAlertView. В этом классе я добавляю UITableView в качестве подпредставления, а ячейки содержат UILabel и UITextField.

класс реализует: UITableViewDelegate, UITableViewDataSource и UITextFieldDelegate,

В cellForRowAtIndexPath для каждой ячейки cell.uiTxtField.delegate установлено значение self.

Как в симуляторе, так и на реальном устройстве iPhone происходит следующее:

  • Когда я устанавливаю указатель / палец в UITextField, появляется клавиатура и запускается textFieldDidBeginEditing, это нормально и, как и ожидалось.

  • Когда я выхожу из UITextField, запускается textFieldDidEndEditing, что тоже нормально и, как и ожидалось.

  • Но когда я начинаю вводить текст, курсор перестает мигать, но текст в UITextField не набирается.

  • Я могу скопировать и вставить текст, удерживая указатель / палец в UITextField, который содержит текст, выбрать копию, а затем вставить ее в другое UITextField (или то же самое).

  • Backspace работает нормально.

  • Он также позволяет мне вводить символы, смайлы и т. Д.

  • Единственное, что я не могу ввести, это символы / буквы и цифры.

  • Кнопка возврата не вызывает textFieldShouldReturn.

Поскольку срабатывают textFieldDidBeginEditing и textFieldDidEndEditing, я предполагаю, что настройка моего делегата в порядке, но я не могу понять, почему я не могу ввести текст и почему не запускается textFieldShouldReturn.

Это может быть связано.

Любая помощь приветствуется.


person kristoffer_o    schedule 25.06.2012    source источник
comment
у меня такая же проблема .. кто-нибудь знает решение, пожалуйста, помогите   -  person Anju    schedule 01.10.2012


Ответы (2)


вы поместили это в метод "init" вашего пользовательского класса?

попробуйте поместить такой код в свой файл реализации ...

@implementation CustomAlertClass <UITextFieldDelegate>

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
    //
    self.YourTextField.delegate = self;
}
return self;
}

@end
person iOS_DEV    schedule 04.09.2013

Краткий ответ: убедитесь, что у вас нет кода, который нарушает свойство "редактирование" в UITextField.

У меня были те же симптомы, когда я определенно правильно настраивал делегата и вызывались textFieldDidBeginEditing и textFieldDidEndEditing, но не вызывались textFieldShouldReturn и shouldChangeCharactersInRange. Я также не мог вводить какие-либо символы, но я мог скопировать вставку в текстовое поле. В моем случае я также помещал текстовые поля внутри ячеек в UITableView. Моя ситуация немного отличалась от того, что кнопка удаления не работала.

Я ошибся в том, что я не использовал необработанный UITextField в своих ячейках, у меня был собственный подкласс UITextField. У моего подкласса было свойство isEditing, которое я модифицировал в методах UITextFieldDelegate и использовал, чтобы выяснить, как прокручивать представление таблицы при выборе текстового поля. Это переопределило метод isEditing в UITextField, который используется в качестве получателя для свойства редактирования UITextField. Как только я избавился от свойства подкласса isEditing, все стало вести себя так, как ожидалось.

person Joe    schedule 04.12.2013