web-dev-qa-db-ja.com

Swift-UITableViewスクロールイベント

UITableViewがスクロール(上下)しているかどうかを検出する方法を知りたいと思っていました。 UITableViewself.view.endEditing(true)でスクロールされるときにキーボードを非表示にします。

前もって感謝します

18
Kaaseter

UIScrollViewDelegateを追加できます。その後、scrollViewDidScrollメソッドを実装できます。

30
ridvankucuk

UITableビューのプロパティを設定できます(XCode 7+)

ストーリーボード内:
In Storyboard

コード内:

tableView.keyboardDismissMode = .onDrag
32
Daniil Chuiko

完全なソリューションは次のようになると思います。

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView == feedTableView {
        let contentOffset = scrollView.contentOffset.y
        print("contentOffset: ", contentOffset)
        if (contentOffset > self.lastKnowContentOfsset) {
            print("scrolling Down")
            print("dragging Up")
        } else {
            print("scrolling Up")
            print("dragging Down")
        }
    }
}

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    if scrollView == feedTableView {
        self.lastKnowContentOfsset = scrollView.contentOffset.y
        print("lastKnowContentOfsset: ", scrollView.contentOffset.y)
    }
}

以前の回答は100%正確ではありませんでした。

説明:スクロールが停止するとscrollViewDidEndDraggingが呼び出されるため、最後の既知のオフセットを保存します。その後、デリゲートメソッドscrollViewDidScrollの現在のオフセットと比較します。

10
Giggs
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

        if(velocity.y>0){
            NSLog("dragging Up");
        }else{
            NSLog("dragging Down");
        }
    }
8
Jamil