检查 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 是不是从子单元格滚动的主要内容,如果未能解决你的问题,请参考以下文章

检查字符串是不是是从子字符串列表构建的算法

如何检查 UIScrollView 内容是不是不需要使用滚动

从子表更新父表单元格值

从子视图刷新 UIView

检查 UView 是不是在 Self.View 范围内

用从子视图调用的视图填充 iphone 屏幕