Могу ли я перетаскивать разделы в табличном виде, как я могу сделать это со строками? - PullRequest
1 голос
/ 14 апреля 2011

Я использую

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath 
  toIndexPath:(NSIndexPath *)destinationIndexPath{
 }

метод для перетаскивания строк внутри и поперек разделов. Могу ли я выполнять перетаскивание с разделами?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Вероятно, концептуально (а также технически) проще вернуться на уровень назад к представлению таблицы, где каждая строка соответствует разделам таблицы, которую вы хотите переупорядочить.Возможно, вы могли бы вызвать это с помощью кнопки «переупорядочить разделы», показать представление таблицы разделов, переупорядочить, а затем наложить это переупорядочение в табличном представлении сведений.Я думаю, что если вы попытаетесь сделать все это в одной таблице, вы расстроите себя и своих пользователей.Мои 2 цента.-Mike

1 голос
/ 26 января 2013

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

Мой основной подход заключался в добавлении строки, представляющей раздел, в верхней части каждого раздела. Я также добавил строку «Добавить новый раздел» со стилем редактирования UITableViewCellEditingStyleInsert в конце каждого раздела, чтобы разрешить создание новых разделов непосредственно в представлении. Итак, для каждого раздела строки были такими:

  • Строка 0 = Строка сечения (визуально различается путем установки различных цвет фона)
  • Строки от 1 до x = обычные строки данных
  • Row x + 1 = "Добавить новый раздел"

(У меня есть пара простых методов для перевода между «режимом редактирования indexPath» и «указателем реальных данных».)

Для перемещающихся секций, предлагаемое перемещение проверяется в методе UITableViewDelegate Protocol tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:, чтобы убедиться, что ряд секций переместился «достаточно далеко» (выше или ниже другой строки секций). Возвращаемый indexPath обрезается чуть выше или чуть ниже ближайшей строки раздела (в зависимости от того, перемещается ли он вверх или вниз), чтобы дать пользователю визуальную индикацию того, куда он будет перемещен.

В tableView:moveRowAtIndexPath:toIndexPath: изменение источника выполняется в источнике данных, затем в tableView отправляется сообщение reloadData для отображения изменения. reloadData используется вместо moveSection:toSection:, поскольку в последнем случае источник данных и отображение будут не синхронизированы из-за перемещения строки и вызовут исключение.

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