有没有办法检查我的tableview刚完成滚动? table.isDragging
和table.isDecelerating
是我能找到的唯一两种方法。我不确定在tableview完成滚动时如何预测或得到通知。
如果tableView正在滚动,我可以以某种方式使用计时器来检查每一秒吗?
答案 0 :(得分:35)
您将按如下方式实施UIScrollViewDelegate
协议方法:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (!decelerate) {
[self scrollingFinish];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self scrollingFinish];
}
- (void)scrollingFinish {
//enter code here
}
Swift版
public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if decelerate {
scrollingFinished()
}
}
public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
scrollingFinished()
}
func scrollingFinished() {
print("scrolling finished...")
}
对于上面的委托方法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
。
答案 1 :(得分:5)
每次用户滚动停止时,以下代码都会更新。
- (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");
}
答案 2 :(得分:1)
UITableView符合UIScrollViewDelegate。请参阅该协议的文档,它有您需要的方法。
答案 3 :(得分:0)
在使用shanegao's answer和Jovan Stankovic的评论之后,我为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
}
}