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?
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.
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;
}
...
}
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) {
}