2014-01-26 1 views
5

Итак, у меня есть пользовательская анимация, реализованная внутри метода willDisplayCell. Он отлично работает, когда я просматриваю представление вверх и вниз. Когда я нажимаю на одну из строк, он будет перенаправлен на другой контроллер представления, чтобы показать больше деталей и позволить пользователю обновлять данные.Только анимация ячейки из willDisplayCell при прокрутке пользователя, а не после reloadData

Проблема в том, когда пользователь возвращается к представлению таблицы. Я вызвал метод [tableView reloadData] внутри viewWillAppear, чтобы убедиться, что обновлены данные. Это вызовет переход анимации, который я установил ранее.

Мой вопрос: есть ли способ произносить только анимацию, когда пользователь прокручивает вверх/вниз по просмотру таблицы, а не когда вызывается reloadData?

Если есть способ смешать между willDisplayCell с scrollViewDidScroll или чем-то рядом с этой линией, это было бы замечательно.

Спасибо!

+0

ли вам нужно перезагрузить таблицу? Можете ли вы просто получить обратный вызов с измененным состоянием и обновить только это (прямо в ячейку, если она видна)? – Wain

+0

Да, я предпочитаю перезагружать данные. Пример выше (о возврате из детали VC) - это всего лишь один сценарий. У меня также есть reloadData, вызываемый в viewDidLoad, и он тоже выглядит не очень хорошо. –

ответ

3

Простейшим решением было бы добавить флаг состояния, который будет указывать willDisplayCell, действительно ли он должен быть анимирован.

Добавить объект в вашем UITableViewDelegate:

@property (nonatomic) BOOL shouldPreventDisplayCellAnimation; 

Установите свойство до и после вызова reloadData:

- (void)viewWillAppear:(BOOL)animated 
{ 
    … 
    self.shouldPreventDisplayCellAnimation = YES; 
    [self.tableView reloadData]; 
    self.shouldPreventDisplayCellAnimation = NO: 
} 

Modify willDisplayCell анимировать при условии

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!self.shouldPreventDisplayCellAnimation) { 
    //animate 
    } 
} 
+0

Теоретически, я думал, что это сработает. Но когда reloadData заканчивается, анимация будет триггером. Я проверил, что флаг установлен правильно. –

+1

Однако, исходя из вашей идеи, я думаю, мне удалось выйти с обходным решением. Я помещаю 'self.shouldPreventDisplayCellAnimation = NO'' в метод' scrollViewWillBeginDragging'. Кажется, сейчас работает! Я приму ваш ответ, если нет другого решения для этого решения –

+0

Решение никогда не принималось. ^ –

Смежные вопросы