我引用了这个问题: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上)还是我错过了另一种方法呢?
答案 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.
}