Как анимировать UITableView без сброса позиции таблицы, как в приложении Apple Mail? - PullRequest
0 голосов
/ 08 августа 2011

У меня есть tableView, в котором есть кнопка, чтобы перевести ее в режим псевдоредактирования. В этом режиме эти ячейки «сдвигаются вправо / влево» для отображения флажка с левой стороны. Этот процесс не отличается от того, как работает кнопка «Изменить» в почтовом приложении.

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

[UIView beginAnimations:@"cell shift" context:nil];
[UIView setAnimationDuration:kEventActionViewAnimationDuration];

cell.eventName.frame = (self.pseudoEditing) ? kPseudoEditingFirstIndentedRect :     kFirstLabelRect;
cell.eventLocationName.frame = (self.pseudoEditing) ? kPseudoEditingSecondIndentedRect : kSecondaryLabelRect;
cell.eventStartDate.frame = (self.pseudoEditing) ? kPseudoEditingThirdIndentedRect : kThirdLabelRect;
cell.eventStartEndTime.frame = (self.pseudoEditing) ? kPseudoEditingFourthIndentedRect : kFourthLabelRect;
cell.imageView.frame = (self.pseudoEditing) ? kImageViewIndentedRect : kImageViewRect;
cell.rsvpImageView.hidden = !self.pseudoEditing;

[UIView commitAnimations];

return cell;

Моя проблема, однако, заключается в том, что мне нужно перезагрузить таблицу, чтобы вызвать cellForRowAtIndexPath: метод для обновления ячеек, который, в свою очередь, сбрасывает позицию таблицы в верхнюю часть tableView. Я мог бы затем установить позицию таблицы в положение, в котором она находилась до нажатия кнопки редактирования, используя что-то вроде scrollToIndexPath: ... Это, однако, не сработает, поскольку таблица будет прокручиваться вверх, а затем обратно в предыдущую ячейку. чего я не хочу.

Так есть ли способ перезагрузить tableCells в tableView без положения прокрутки изменения tableView, аналогично тому, как это делает приложение Mail?

Thx

Ответы [ 2 ]

0 голосов
/ 08 августа 2011

Вы можете создать подкласс UITableViewCell и переопределить -layoutSubviews.В этом методе вы проверите свойство UITableViewCell s editing и определите рамки представлений содержимого соответствующим образом.Любые изменения, сделанные в -layoutSubviews, будут автоматически анимироваться при изменении режима редактирования ячеек.Простая установка editing в табличном представлении автоматически выполнит это изменение для всех ячеек.

0 голосов
/ 08 августа 2011

Я бы не стал перезагружать табличное представление для этого вообще. Сделайте так, чтобы ваши клетки имели свойство, подобное multiEditing. Когда вы начнете редактировать, переберите массив visibleCells представления таблицы и установите свойство в блоке анимации (сама ячейка может выполнять анимацию, аналогично существующему методу setEditing:animated:). Для новых ячеек просто установите их без анимации после удаления из очереди / создания.

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