Уведомление о завершении анимации после переупорядочения UITableView вручную - PullRequest
5 голосов
/ 16 марта 2012

UITableView имеет ту встроенную анимацию, в которой после переупорядочения ячейки она аккуратно ложится в свободное пространство. Есть ли где нажать на какое-то уведомление после окончания анимации? Я хотел бы вызвать метод по завершении. На данный момент я использую performSelector:withObject:afterDelay:, который в настоящее время работает нормально, но я хотел бы знать, возможно ли задействовать анимацию завершенной. Повторюсь, я не говорю о пользовательской анимации, а только о встроенной в UITableView анимации.

Я искал вокруг и не могу найти ответ.

Ответы [ 2 ]

4 голосов
/ 16 августа 2013

Я понимаю, что этот вопрос древний, но я все же наткнулся на него, когда пытался найти ответ на ту же проблему, что и @Gobot. Что ж, получается, что есть ПРОСТОЕ решение. Как и то, что сказал @Mitchell Vanderhoeff, вам нужно вставить метод

- (void)tableView:(UITableView *)tableView
        moveRowAtIndexPath:(NSIndexPath *)fromIndexPath
        toIndexPath:(NSIndexPath *)toIndexPath {
        [CATransaction setCompletionBlock:^{
            // Completion code here
        }];
}

в вашем делегате таблицы, чтобы получить уведомление от таблицы, что она собирается переместить строку. Ключ, однако, является CATransaction setCompletionBlock. Это позволит вам установить блок завершения неявной анимационной транзакции, которую табличное представление делает для перемещения строки. Как следует из названия, все, что вы поместите в этот блок, будет выполнено после завершения анимации.

Вам нужно будет включить платформу QuartzCore, если она еще не является частью вашего проекта.

0 голосов
/ 13 сентября 2012

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

tableViewCell.showsReorderControl = YES;

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

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

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

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
    [self doMyFavoriteThing];
}

Вот и все! Конечно, это не строго говоря конец анимации, но это сводится к тому же событию.

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