web-dev-qa-db-fra.com

Swift - Événement de défilement UITableView

Je me demandais comment détecter si le UITableView défile (vers le haut ou vers le bas). Je veux masquer le clavier lorsque le UITableView défile avec self.view.endEditing(true).

Merci d'avance

18
Kaaseter

Vous pouvez ajouter UIScrollViewDelegate. Après cela, vous pouvez implémenter la méthode scrollViewDidScroll.

30
ridvankucuk

Vous pouvez définir la propriété de la vue UITable (XCode 7+)

Dans Storyboard:
In Storyboard

dans du code:

tableView.keyboardDismissMode = .onDrag
32
Daniil Chuiko

Je pense que la solution complète serait la suivante:

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)
    }
}

Les réponses précédentes n'étaient pas exactes à 100%.

Explication: scrollViewDidEndDragging sera appelé lorsque le défilement s'arrête, donc nous enregistrons le dernier décalage connu. Après cela, nous le comparons avec le décalage actuel dans la méthode déléguée 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