Echart version 4
удалил опцию заполнения из узлов. Я также пытался это исправить, но есть проблема с echart github . Вы можете использовать другие функции, такие как mouseOver.
Эта реализация предотвратит изменение порядка за пределами исходного раздела, как в ответе Фила, но также привяжет запись к первой или последней строке раздела, в зависимости от того, где перетаскивание пошло вместо того, где оно началось.
- (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;
}
На самом деле достаточно просто.
UITableViewDelegate имеет метод:
tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:
Он вызывается, когда пользователь наводит курсор на потенциальную точку сброса. У вас есть возможность сказать: «Нет! Не роняйте его сюда! Вместо этого бросайте сюда». Вы можете вернуть другой путь индекса к предложенному.
Все, что я сделал, это проверил, совпадают ли индексы разделов. Если они это сделают, то отлично, верните предложенный путь. если нет, верните исходный путь. Это также прекрасно предотвращает смещение строк в других разделах даже при перетаскивании - и перетаскиваемая строка вернется в исходное положение, если вы попытаетесь переместить ее в другой раздел.
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
if( sourceIndexPath.section != proposedDestinationIndexPath.section )
{
return sourceIndexPath;
}
else
{
return proposedDestinationIndexPath;
}
}