0

したがって、UITableViewが現在スクロールしているかどうかをUIを更新するために知る必要があるUITableViewCellサブクラスがあります。したがって、サブクラスの 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 に答える