有没有办法检查我的tableview是否刚刚完成滚动? table.isDragging
和table.isDecelerating
是我能找到的唯一两种方法。我不确定我在桌面视图滚动完成时如何预测或得到通知。如何检查当UITableView完成滚动
我可以以某种方式使用计时器检查每一秒如果tableView滚动或不?
有没有办法检查我的tableview是否刚刚完成滚动? table.isDragging
和table.isDecelerating
是我能找到的唯一两种方法。我不确定我在桌面视图滚动完成时如何预测或得到通知。如何检查当UITableView完成滚动
我可以以某种方式使用计时器检查每一秒如果tableView滚动或不?
UITableView符合UIScrollViewDelegate。请参阅该协议的文档,它有你需要的方法。
你会实现UIScrollViewDelegate
协议方法如下:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (!decelerate) {
[self scrollingFinish];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[self scrollingFinish];
}
- (void)scrollingFinish {
//enter code here
}
对于上述委托方法The scroll view sends this message when the user’s finger touches up after dragging content. The decelerating property of UIScrollView controls deceleration.
当视图减速停止,参数decelerate
将NO
。
第二个用于缓慢滚动,甚至在您的手指触摸时滚动停止,如Apple Documents所述,when the scrolling movement comes to a halt
。
下面的代码会在用户每次停止滚动时更新。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (!decelerate)
{
if (isScrollingStart)
{
isScrollingStart=NO;
[self scrollingStopped];
}
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
if (isScrollingStart)
{
isScrollingStart=NO;
[self scrollingStopped];
}
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
isScrollingStart=YES;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
isScrollingStart=YES;
}
-(void)scrollingStopped
{
NSLog(@"Scrolling stopped");
}
使用shanegao's answer和它的Jovan斯坦科维奇的评论后,我设计了这个Swift3 -
extension NMViewController: UIScrollViewDelegate {
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate {
scrollViewDidEndDecelerating(scrollView)
}
}
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
scrollViewDidEndDecelerating(scrollView)
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
// Your logic to handle after scrolling is done
}
}
用户还可以通过点击屏幕顶部调用表滚动。不幸的是,在这种情况下,scrollViewDidEndDecelerating没有被调用,所以我们必须实现scrollViewDidScrollToTop来处理这种情况。 – 2017-06-27 09:28:49
这个答案是最好的,而@JovanStankovic,你是非常正确的。 – 2017-10-05 08:49:44