2009-05-22 10 views
1

Il semble que si cette méthode est appelée chaque fois que l'utilisateur touche mon point de vue:Comment puis-je déterminer par programme si un événement "touchUpInside" s'est produit?

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if ([touch view] == self && [touch tapCount] >= 1) { 
     // do something... 
    } 
} 

J'ai mis cela dans un UIScrollView. La documentation pour UIEvent ne mentionne pas les événements touchUpInside, touchUpOutside, etc. qui sont disponibles dans Interface Builder lors de la création de connexions à des méthodes d'action.

En fait, je veux qu'une méthode soit appelée seulement sur un de ces événements "touchUpInside", plutôt que sur n'importe quel type de contact.

+0

Vous pouvez décomposer et voir si le touchLocation de l'objet UITouch appartient à la vue du même objet UITouch. –

Répondre

3

Vous souhaitez touchesEnded:withEvent:. La méthode touchesBegan est appelée lorsqu'une touche ou une série de touches commence dans un répondeur UIR; la méthode touchesEnded est appelée lorsque ce lot de touches est terminé (c'est-à-dire que votre utilisateur cesse de toucher l'écran/lève un doigt).

+3

Ceci est utile, mais malheureusement, il ne répond pas entièrement à la question. Comment pouvez-vous déterminer dans touchEnded: withEvent: si un événement touchUpInside s'est produit? –

1

La méthode canonique consiste à créer un IBAction et à l'associer à l'événement touchUpInside dans InterfaceBuilder.app.

À chaque fois qu'une opération TouchUpInside se produit, votre IBAction sera appelée.

Si vous créez par programmation, en dehors de IB, vous pouvez toujours connecter IBAction.

+0

Je crée 20 images dans une grille, qui s'étend dynamiquement lorsque l'utilisateur fait défiler. Comment est-ce que je pourrais les attacher à un IBAction? IB devrait savoir dans quelle vue cela se passe, n'est-ce pas? Comment pourrais-je dire à IB que «génériquement»? – Thanks

+3

Vérifiez la classe UIControl ref et addTarget: action: forControlEvents: – amattn

+0

Vous n'avez besoin que d'une seule méthode touchUpInside. Et IB n'a pas besoin de faire la connexion - vous pouvez le faire lorsque les images sont chargées. –

1

Voici comment je relie créer un IBAction à un champ de texte:

[yourTextField addTarget:self action:@selector(your method:) forControlEvents:UIControlEventTouchUpInside]; 
0

technique de Vadoff est propre, mais ne pas oublier de nettoyer l'événement tactile en appelant la fonction super. Voici le code complet.

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 

    BOOL touchedUpInside = NO; 
    if (self.isTouchUpInside) { 
     touchedUpInside = YES; 
    } 

    [super touchesEnded:touches withEvent:event];  

    if (touchedUpInside) { 
     // touched up inside 
    } 
} 
Questions connexes