web-dev-qa-db-ja.com

UITableViewのスクロールが完了したことを確認する方法

テーブルビューがスクロールを終了したかどうかを確認する方法はありますか? table.isDraggingおよびtable.isDecelerating私が見つけることができる唯一の2つの方法です。テーブルビューのスクロールが終了したときに、どのように予測するか、通知を受け取ることができるかわかりません。

TableViewがスクロールしているかどうかをタイマーを使用して毎秒チェックできますか?

18
sankaet

次のように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.ビューが減速して停止すると、パラメータdecelerateNOになります。

2つ目はゆっくりとスクロールするために使用され、Appleドキュメントによると、when the scrolling movement comes to a halt

35
shanegao

以下のコードは、ユーザーのスクロールが停止するたびに更新されます。

- (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");
}
5
Pandey_Laxman

UITableViewはUIScrollViewDelegateに準拠しています。そのプロトコルのドキュメントを参照してください。必要なメソッドがあります。

1
Jeepston

shanegaoの答え と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
    }
}
0
Nikhil Manapure