检测编程式UIScrollView滚动结束

4
我正在使用scrollToRowAtIndexPath在UITableView中进行程序化滚动,但此方法不会触发scrollViewDidEndDecelerating。有什么好方法可以检测此滚动何时完成?
我之所以问这个问题是因为我的代码如下:
[tableView1 scrollToRowAtIndexPath:indexPath1 atScrollPosition:UITableViewScrollPositionBottom animated:YES];
[tableView2 scrollToRowAtIndexPath:indexPath2 atScrollPosition:UITableViewScrollPositionMiddle animated:YES];

// Additional methods here

有时候,滚动尚未完成就会触发其他方法。我希望使用比 performSelector: afterDelay: 更加可靠的方法。

1个回答

10

你尝试过使用scrollViewDidEndScrollingAnimation:吗?这个方法可能存在与你的其他代理方法相同的问题,但是值得一试。文档明确指出它在setContentOffset:animated:scrollRectToVisible:animated:的末尾调用,我有一个预感,它可能被用于实现scrollToRowAtIndexPath:atScrollPosition:

编辑:已经确认scrollViewDidEndScrollingAnimation:scrollToRowAtIndexPath:atScrollPosition:的末尾被调用。谢谢Ian!


哎呀,我在文档中错过了那个方法。我可以确认它在 scrollToRowAtIndexPath: 结束时被调用(大多数情况下?!- UIScrollViews 对我来说似乎有点问题),这正是我正在寻找的。谢谢。 - Growth Mindset
对我来说,它被调用得太频繁了。我在一个单元格中有一个textField,如果它获得焦点,这个方法会立即被调用,然后在动画之后再次被调用... 真糟糕。 - Julian F. Weinert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接