2010-08-31 2 views
2

Я перегрузил метод:Изменение управления редактированием UITableViewCell

- (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

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

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

В конце концов я решил обе проблемы, вызывая

- (void) prepareForReuse; 

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

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

+0

Всегда находите лучшее решение для этого? Это анимирующий материал слева, как знак, так и, в моем случае, (x) для очистки содержимого текстового поля в ячейке. Плюс запуск prepareForReuse на что-то в таблице просто кажется страшным. – smparkes

+0

cf http://stackoverflow.com/questions/5622431/update-editing-style-of-uitableviewcell-depending-on-contents – smparkes

Смежные вопросы