Как сделать так, чтобы текстовое представление ячейки таблицы не редактировалось после завершения редактирования? - PullRequest
1 голос
/ 19 мая 2010

Так что это интересная проблема. У меня есть пользовательские табличные ячейки с текстовым полем. Когда в моем cellForRowAtIndexPath у меня есть оператор if, который определяет, должно ли текстовое поле ячейки редактироваться - это выглядит так:

(self.isEditing) ? [infoCell.textField setEnabled:YES] : [infoCell.textField setEnabled:NO];

Это на самом деле хорошо работает - за исключением проблемы, которая у меня возникла. Это делает так, чтобы при отображении таблицы текстовое поле строк не могло быть отредактировано. Когда пользователь нажимает «Изменить», чтобы перевести его в режим редактирования, текстовые поля становятся доступными для редактирования.

Проблема: Когда я редактирую поле и нажимаю «Готово», он возвращается к обычному виду таблицы, но клавиатура остается видимой, а текстовое поле последней ячейки, которое я редактировал, продолжает редактироваться. ,

Что должно произойти: Клавиатура должна исчезнуть, и текстовые поля всех ячеек больше не должны редактироваться.

Есть идеи о том, что может пойти не так? Что искать?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 мая 2010

К сожалению, отключение UITextField не приведет к отключению клавиатуры. Вам нужно сохранить указатель на ваш текущий UITextField. Сначала создайте переменную экземпляра в вашем заголовочном файле:

UITextField *currentTextField;

Затем реализуйте протокол UITextFieldDelegate. Грязная работа будет выполнена следующим способом:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    currentTextField = textField;
}

Наконец, когда вы будете готовы закрыть клавиатуру и отключить текстовые поля, просто наберите:

[currentTextField resignFirstResponder];
[textField1 setEnabled:NO];
[textField2 setEnabled:NO]; //ad nauseum

Удачи!

1 голос
/ 19 мая 2010

Я считаю self.isEditing ненадежным. Если вы редактируете отдельную ячейку, она работает иначе, чем когда вы находитесь в «режиме редактирования».

Что я сделал, чтобы обойти это, так это то, что когда я хочу что-то сделать со всеми остальными ячейками, я просто перебираю метод visibleCells моего табличного представления и вручную корректирую их. Вам нужно будет подумать, что произойдет, когда появятся новые ячейки, но это зависит от вашей реализации.

NSArray *visibleCells = [self.tableView visibleCells];
for (UITableViewCell *cell in visibleCells) {
    [cell doSomething];
}

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

...