2012-05-21 70 views
0

因此,我有一個UITableViewCell子類,需要知道UITableView當前是否正在滾動或不更新UI。所以我不得不指向子類中的UITableView財產,我有以下方法代表了UIScrollView的委託:檢查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]; 

} 

正在滾動本質上是一個NSNumber的指示滾動視圖是否滾動與否。我將這個傳遞給UITableViewCell以便稍後在類中使用,以查看狀態是否正在滾動。我打算使用KVO,但僅僅使用BOOL是不可能的(或者如果有可能讓我知道)。有沒有更優雅的方式來做到這一點?

我有我的UITableViewCell的指派屬性如下

@property (nonatomic, assign) BOOL isScrolling 

,當我INITING我的UITableViewCell子類,我assinging與isScrolling上的UITableView isScrolling。我想我最關心的這種方法是,如果我改變了UIScrollView委託的isScrolling,UITableViewCell子類的isScrolling屬性是否也反映了這種變化?

回答

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設置正確的狀態。