Программно перемещать / анимировать строку UITableView из одной позиции в другую - PullRequest
6 голосов
/ 24 февраля 2011

У меня есть UITableView, и я хочу программно переместить одну строку из положения N1 в положение N2, и я хотел бы, чтобы он анимировал из старого местоположения в новое.Я просмотрел документацию по UITableView и вижу только вставки, перезагрузки и удаления.Знаете ли вы, как я могу сделать это программно?

Пара замечаний:

  • Я знаю, что могу анимировать удаление из местоположения N1 и анимировать вставкув местоположение N2 в то же время.Это мой запасной вариант, но я бы хотел, чтобы пользователь понял, что он действительно перемещается из N1 в N2.

  • Я не говорю о том, чтобы позволить пользователю перетаскивать его из одного места.другому.Я понимаю, как это сделать, я ищу способ инициировать и анимировать движение программно.

Ответы [ 3 ]

4 голосов
/ 25 февраля 2011

Я имел дело с чем-то вроде этого в прошлом, и решение не изящное, но оно работает.

По сути, вам нужно сделать некоторую математику, чтобы вычислить, где на экране находится строка. Затем настройте его на основе свойства y contentOffset вашего UITableView.

Вы можете сделать это так:

[myView convertPoint:localPosition toView:nil];

Тогда вы бы построили новый UIView, который идентичен вашему взгляду. Установите его рамку так, чтобы она находилась прямо над UITableViewCell, который вы пытаетесь переместить. Добавьте его в качестве подпредставления основного приложения UIWindow.

Вы захотите установить userInteractionEnabled или scrollEnabled на NO на вашем UITableView, пока все это происходит, чтобы пользователь не мог изменить положение вещей на протяжении всего процесса (просто не забудьте установить его обратно на YES, когда все будет сделано, анимация).

Затем оживите его до новой позиции, однако имеет смысл.

Я понимаю, что вам, возможно, придется прокручивать UITableView в процессе всего этого, что значительно усложняет ситуацию, но вы можете оживить и эту прокрутку.

Вам, конечно, придется выполнять аналогичные операции с анимацией строки от до , если это необходимо в вашем приложении.

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

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

1 голос
/ 12 июня 2013
[table beginUpdates];
[table moveRowAtIndexPath:indexPath toIndexPath:destIndexPath];
[table endUpdates];
0 голосов
/ 03 декабря 2012

Если вы используете iOS 5 или выше, вы можете использовать метод:

- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath

Например:

//move last cell one row up.
NSIndexPath *oldPath = [NSIndexPath indexPathForRow:[items count] - 1 inSection:0];
NSIndexPath *newPath = [NSIndexPath indexPathForRow:[items count] - 2 inSection:0];
[[self tableView] moveRowAtIndexPath:oldPath toIndexPath:newPath];

Ознакомьтесь с документацией Apple здесь .

Полагаю, лучшим вариантом для вас будет метод удаления и вставки, например:

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:oldPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newNewPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView endUpdates];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...