web-dev-qa-db-fra.com

Événement UITableView Scroll

Je veux détecter si la vue de ma table a défilé, j'ai essayé tous les événements tactiles comme celui-ci:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  {
    [super touchesBegan:touches withEvent:event];
    //my code
  }

mais il semble que tous les événements tactiles ne répondent pas au défilement, mais ils répondent uniquement lorsque les cellules sont touchées, déplacées, etc.

Existe-t-il un moyen de détecter l'événement de défilement de UITableView?

42
Alaa Eldin

Si vous implémentez le protocole UITableViewDelegate, vous pouvez également implémenter l'une des méthodes UIScrollViewDelegate :

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

ou

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

Par exemple, si vous avez une propriété appelée tableView:

// ... setting up the table view here ...
self.tableView.delegate = self;
// ...

// Somewhere in your implementation file:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    NSLog(@"Will begin dragging");
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"Did Scroll");
}

En effet, UITableViewDelegate est conforme à UIScrollViewDelegate, comme on peut le voir dans la documentation ou dans le fichier d'en-tête.

118
fabian789

Si vous avez plusieurs vues de table comme demandé par Solidus, vous pouvez convertir la vue de défilement du rappel en vue de table car UITableView est dérivée de UIScrollView, puis comparer avec les vues de table pour trouver la vue de table source.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {    
        UITableView* fromTableView = (UITableView*) scrollView;
        UITableView* targetTableView = nil;
        if (fromTableView == self.leftTable) {
            targetTableView = self.leftTable;
        } else {
            targetTableView = self.rightTable;
        }
...
}
6
dev

Ce sont les méthodes de UITableViewDelegate pour Swift 3 pour détecter quand un UITableView défilera ou a défilé:

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {

}

func scrollViewDidScroll(_ scrollView: UIScrollView) {

}
3
pableiros