是否可以在UITableView完成滚动时收到通知?

时间:2010-03-01 18:24:57

标签: iphone cocoa-touch

我引用了这个问题:How to detect when a UIScrollView has finished scrolling

UITablewView是UIScrollView的子类,当我手动滚动表时,我的UITableView委托 获取- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView消息。

但是,当我呼叫- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated滚动表格时,我没有收到scrollViewDidEndDecelerating消息。我使用scrollRowToIndexPath...调用animated:YES方法。

这是一个错误/ API限制(在iPhone SDK 3.1.3上)还是我错过了另一种方法呢?

3 个答案:

答案 0 :(得分:6)

万一有人还在追逐这个,Apple文档在scrollToRowAtIndexPath:atScrollPosition:animated:文档下说了以下内容:

  

“调用此方法不会导致委托接收   scrollViewDidScroll:消息,正常情况下   以编程方式调用的用户界面操作。“

答案 1 :(得分:1)

我遇到了同样的问题。但是我通过以编程方式滚动到指定的行来解决它:

NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 0.6
                                              target: self
                                            selector:@selector(doneScrolling)
                                            userInfo: nil repeats:NO];

就我而言,我只想在滚动到该行后突出显示该行。

OR

如果您希望代码执行得更加立即并且不想等待.6秒,您可以循环以继续检查您滚动到的行是否仍然可见。使用UITableView上的visibleCells属性。当它可见时,你知道它已完成滚动,你可以执行你的代码。

答案 2 :(得分:0)

如果以编程方式滚动,则可以快速使用UIScrollViewDelegate方法。

func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
  //your code to execute after scrolling.
}

客观

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
 //your code to execute after scrolling.
}