Как ограничить переупорядочение строки UITableView разделом

Echart version 4 удалил опцию заполнения из узлов. Я также пытался это исправить, но есть проблема с echart github . Вы можете использовать другие функции, такие как mouseOver.

117
задан 4 revs, 4 users 86% 20 May 2019 в 15:14
поделиться

2 ответа

Эта реализация предотвратит изменение порядка за пределами исходного раздела, как в ответе Фила, но также привяжет запись к первой или последней строке раздела, в зависимости от того, где перетаскивание пошло вместо того, где оно началось.

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
  if (sourceIndexPath.section != proposedDestinationIndexPath.section) {
    NSInteger row = 0;
    if (sourceIndexPath.section < proposedDestinationIndexPath.section) {
      row = [tableView numberOfRowsInSection:sourceIndexPath.section] - 1;
    }
    return [NSIndexPath indexPathForRow:row inSection:sourceIndexPath.section];     
  }

  return proposedDestinationIndexPath;
}
180
ответ дан 24 November 2019 в 02:05
поделиться

На самом деле достаточно просто.

UITableViewDelegate имеет метод:


tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:

Он вызывается, когда пользователь наводит курсор на потенциальную точку сброса. У вас есть возможность сказать: «Нет! Не роняйте его сюда! Вместо этого бросайте сюда». Вы можете вернуть другой путь индекса к предложенному.

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


- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
    if( sourceIndexPath.section != proposedDestinationIndexPath.section )
    {
        return sourceIndexPath;
    }
    else
    {
        return proposedDestinationIndexPath;
    }
}
73
ответ дан 24 November 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: