Изменение элемента управления для редактирования UITableViewCell - PullRequest
2 голосов
/ 31 августа 2010

Я переопределил метод:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView 
           editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

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

Использование:

[myViewCell setNeedsLayout];

... не вызывает [myTableView tableView:editngStyleForRowatIndexPath:] для запуска.

Вызов

[tableView reloadRowsAtIndexPaths: ... withRowAnimation:UITableViewRowAnimationNone];

... делает что-то странное ... это вызывает [myTableView tableView:editngStyleForRowatIndexPath:], который вызывается во всех строках, КРОМЕ ТОГО, что я посылаю в reloadRowsAtIndexPaths параметр.

Несмотря на это, поскольку я вставляю строку, метод вызывается во всех моих строках, включая ту, которую я хочу изменить.Я проверил, что он возвращает UITableViewCellEditingStyleDelete.Даже если он возвращает правильное значение, он все равно показывает значок плюс вместо значка минус.

Вызов [tableview reloaddata] не работает.

Существует свойство editingStyle наUITableViewCell, который, кажется, решил бы мои проблемы, но только для чтения.Как если бы метод tableView:editingStyleForRowAtIndexPath: установил editingStyle, это никогда не может быть изменено.Почему же тогда этот метод будет вызываться непрерывно, когда строки прокручиваются в представление?

Как изменить управление редактированием UITableViewCell?

Вы заметите, что в приложении «Контакты» Appleтакое же точное поведение, за исключением того, что оно переходит от UITableViewCellEditingStyleNone вместо UITableViewCellEditingStyleInsert.Это можно увидеть, отредактировав контакт, а затем набрав номер в последнем поле телефона (т.е. добавив новый номер телефона): текущая строка получает кнопку минус, а под ней добавляется новая строка.

1 Ответ

1 голос
/ 21 октября 2010

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

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

Я в итоге решил обе проблемы, позвонив

- (void) prepareForReuse;

в рассматриваемой ячейке. Я не думаю, что это элегантное решение, но оно как-то работает. Если я вызываю этот метод перед тем, как начать редактирование, он вызывает некоторые странные сбои анимации, но если я вызываю его после обновления базовых структур данных и в пределах tableView beginUpdates и tableView endUpdates, он идеально подходит для случая, когда я хочу добавить знак минус.

Во втором случае знак плюс удаляется без анимации, вызывая этот метод непосредственно перед пустой последовательностью tableView beginUpdates и tableView endUpdates. Это выглядит немного неожиданно, но я могу жить с этим, пока есть функциональность.

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