检查 UIScrollView 是不是从子单元格滚动
Posted
技术标签:
【中文标题】检查 UIScrollView 是不是从子单元格滚动【英文标题】:check if UIScrollView is scrolling from subcells检查 UIScrollView 是否从子单元格滚动 【发布时间】:2012-05-21 05:47:01 【问题描述】:所以我有一个 UITableViewCell 子类,它需要知道 UITableView 当前是否正在滚动以更新 UI。所以我在子类中有一个指向 UITableView 的属性,并且我有 UIScrollView 委托的以下方法委托:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
CGFloat scrollOffset = scrollView.contentOffset.y;
CGFloat contentHeight = scrollView.contentSize.height - kLoadMoreOffset;
if (scrollOffset >= contentHeight && loadMore && [self.nextPaginationURL_ isNotNull])
loadMore = NO;
[self loadMore];
self.isScrolling = [NSNumber numberWithInt:1];
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
if (!decelerate)
self.isScrolling = [NSNumber numberWithInt:0];
NSLog(@"FIRING NOTIF END DRAGGING");
[self showLoadMore];
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
NSLog(@"FIRING NOTIF END DECEL");
self.isScrolling = [NSNumber numberWithInt:0];
[self showLoadMore];
Is scrolling 本质上是一个 NSNumber 来指示滚动视图是否正在滚动。我将它传递给 UITableViewCell 以便稍后在类中使用,以查看状态是否正在滚动。我计划使用 KVO,但仅使用 BOOL 是不可能的(或者如果可能的话,请告诉我)。有没有更优雅的方法来做到这一点?
我的 UITableViewCell 中有一个 assign 属性,如下所示
@property (nonatomic, assign) BOOL isScrolling
当我初始化我的 UITableViewCell 子类时,我正在使用 UITableView 上的 isScrolling 分配 isScrolling。我想我对这种方法最大的担忧是,如果我更改 UIScrollView 委托上的 isScrolling,UITableViewCell 子类上的 isScrolling 属性是否也会反映更改?
【问题讨论】:
【参考方案1】:不,它不会这样做,您需要手动通知可见单元有关更改。编写一个方法来为您完成工作,然后从委托方法中调用它:
- (void)notifyCellsOfScrolling:(BOOL)isScrolling_
// Small optimization, if the state has not changed we don't need to notify.
if (self.isScrolling == isScrolling_)
return;
self.isScrolling = isScrolling_;
for (UITableViewCell *cell in [self.tableView visibleCells])
[cell setIsScrolling:isScrolling_];
您还必须从cellForRowAtIndexPath
设置正确的状态。
【讨论】:
以上是关于检查 UIScrollView 是不是从子单元格滚动的主要内容,如果未能解决你的问题,请参考以下文章