Переделывать макет UITableView, когда пользователь нажимает кнопку «Изменить»? - PullRequest
2 голосов
/ 08 февраля 2010

У меня есть UITableView со сложным контентом. Пользователь может редактировать (переставлять и удалять) ячейки при нажатии кнопки «Изменить» стандартным способом. Но я хочу, чтобы ячейки выглядели по-разному в режиме редактирования.

Вопрос:

Как изменить макет UITableView в режиме редактирования, включая изменение высоты строки?

Пока что вот что у меня есть:

Кнопка «Правка» отправляет сообщение WillTransitionToState / DidTransitionToState каждому uitableviewcell (UITVC). Я разбил UITVC на подклассы и реагировал на них внутри каждой камеры, при необходимости скрывая, удаляя и перетасовывая. Но изменение высоты строки выходит за рамки одной ячейки.

Похоже, что сообщение не отправляется в UITableView, когда пользователь нажимает кнопку редактирования. Существует - tableView: commitEditingStyle: forRowAtIndexPath: отправлено источнику данных после редактирования определенной строки.

Внутри heightForRowAtIndexPath я могу запрашивать текущий режим, используя свойство tableView.editing и, при необходимости, сообщать высоту И я могу запустить повторную передачу таблицы, включая пересчет высот, вызвав [tableView reloadData]. Но когда я это называю?

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

Ответы [ 2 ]

8 голосов
/ 22 марта 2012

Ритмика верна. Использование reloadData убивает красивую анимацию редактирования.

Эта проблема решена в этом сообщении: Можете ли вы анимировать изменение высоты на UITableViewCell при выборе?

Вместо использования reloadData, сделайте следующее после вызова setEditing: animated.

[tableview setEditing:editing animated:YES];
[tableview beginUpdates];
[tableview endUpdates];
3 голосов
/ 09 февраля 2010

Если вы хотите, чтобы ячейки таблицы изменили свой формат в ответ на то, находится ли таблица в режиме редактирования, вы можете переопределить -setEditing:animated: в вашем UITableViewController и запустить перезагрузку (через -reloadData) представления таблицы. при изменении состояния редактирования.

В методе -tableView:cellForRowAtIndexPath: вашего UITableViewController вы можете проверить, была ли таблица в состоянии редактирования, запросив свойство editing в представлении таблицы, а затем вернуть другой тип ячейки в зависимости от того, в каком состоянии находится таблица находится в.

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