Question

J'ai une cellule d'affichage de tableau personnalisé qui gère les gestes de l'utilisateur. Cependant, même si je souhaite que exclusiveTouch soit défini sur YES, dès que la valeur y change d’un montant quelconque, le scolling commence, même si je suis en train de gérer les événements tactiles. Comment empêcher le défilement du tableau lorsque je gère des événements tactiles dans la cellule?

Était-ce utile?

La solution

Donc, la manière correcte de gérer conditionnellement dépend malheureusement de la superView. Pour certaines vues et certains événements (comme UITableView select), vous devez transférer l'événement touchesBegan: à nextResponder, suivre votre geste, transmettre les événements touchMoved: à nextResponder jusqu'à ce que vous détectiez votre geste, puis envoyez-lui un contact Annulé: au prochain répondeur et cache tous les autres événements du prochain répondeur (touches EndEnded: et touchesAncrées :) jusqu'à ce que vous receviez touchesEnded: ou touchesAnnulées: vous-même.

Dans un UIScrollView, cependant, il existe un cas spécial, dans la mesure où cela ne dépend pas du répondeur suivant pour gérer les événements de défilement (le défilement est probablement détecté dans des méthodes telles que hitTest :). Donc, peu importe ce que vous faites en ce qui concerne le transfert ou les événements, le défilement continue. Le seul moyen d'empêcher le défilement est de désactiver le défilement sur la vue parent dès que votre geste est détecté, puis de réactiver le défilement à la fin ou à l'annulation.

Autres conseils

Je pense que vous devez sous-classer UITableView et implémenter hitTest: withEvent: Voici comment je l'ai fait pour une cellule personnalisée que j'ai construite pour faire glisser à gauche et à droite dans la cellule:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    NSIndexPath *indexPath = [self indexPathForRowAtPoint:point];
    UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath];

    if ([cell isKindOfClass:[MyCustomCell class]])
    {
        return cell;
    }

    return [super hitTest:point withEvent:event];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top