0

所以我有一个 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 中有一个分配属性,如下所示

@property (nonatomic, assign) BOOL isScrolling

当我初始化我的 UITableViewCell 子类时,我正在使用 UITableView 上的 isScrolling 分配 isScrolling。我想我对这种方法的最大担忧是,如果我更改 UIScrollView 委托上的 isScrolling,UITableViewCell 子类上的 isScrolling 属性是否也会反映更改?

4

1 回答 1

0

不,它不会这样做,您需要手动通知可见单元有关更改。编写一个方法来为您完成工作,然后从委托方法中调用它:

- (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.

于 2012-05-21T08:18:35.297 回答