From 4725035f21fcabfa632d0c676d33ecd0cd293474 Mon Sep 17 00:00:00 2001 From: Adlai Holler Date: Thu, 4 Aug 2016 13:19:14 -0700 Subject: [PATCH] [ASTableView/ASCollectionView] Flush pending updates before selecting/scrolling to item (#2034) --- AsyncDisplayKit/ASCollectionView.mm | 16 ++++++++++++++++ AsyncDisplayKit/ASTableView.mm | 24 ++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/AsyncDisplayKit/ASCollectionView.mm b/AsyncDisplayKit/ASCollectionView.mm index 1fba9879..161e4a20 100644 --- a/AsyncDisplayKit/ASCollectionView.mm +++ b/AsyncDisplayKit/ASCollectionView.mm @@ -506,6 +506,22 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell"; return visibleNodes; } +- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated +{ + ASDisplayNodeAssertMainThread(); + + [self waitUntilAllUpdatesAreCommitted]; + [super scrollToItemAtIndexPath:indexPath atScrollPosition:scrollPosition animated:animated]; +} + +- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition +{ + ASDisplayNodeAssertMainThread(); + + [self waitUntilAllUpdatesAreCommitted]; + [super selectItemAtIndexPath:indexPath animated:animated scrollPosition:scrollPosition]; +} + #pragma mark Internal /** diff --git a/AsyncDisplayKit/ASTableView.mm b/AsyncDisplayKit/ASTableView.mm index 16e5d3ce..4b0be991 100644 --- a/AsyncDisplayKit/ASTableView.mm +++ b/AsyncDisplayKit/ASTableView.mm @@ -452,6 +452,30 @@ static NSString * const kCellReuseIdentifier = @"_ASTableViewCell"; [_dataController waitUntilAllUpdatesAreCommitted]; } +- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated +{ + ASDisplayNodeAssertMainThread(); + + [self waitUntilAllUpdatesAreCommitted]; + [super scrollToRowAtIndexPath:indexPath atScrollPosition:scrollPosition animated:animated]; +} + +- (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated +{ + ASDisplayNodeAssertMainThread(); + + [self waitUntilAllUpdatesAreCommitted]; + [super scrollToNearestSelectedRowAtScrollPosition:scrollPosition animated:animated]; +} + +- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition +{ + ASDisplayNodeAssertMainThread(); + + [self waitUntilAllUpdatesAreCommitted]; + [super selectRowAtIndexPath:indexPath animated:animated scrollPosition:scrollPosition]; +} + - (void)layoutSubviews { if (_nodesConstrainedWidth != self.bounds.size.width) {