2009-05-26 3 views
3

Interface Builder me permettra seulement de raccorder de tels événements pour un bouton. Mais comme en HTML, je veux juste avoir un UIImageView vide où - dès que l'utilisateur tape dessus - une méthode est invoquée. J'espère qu'il y a une façon de faire sympa par programme, ce que je ne connais pas.Comment est-ce que je peux lier par programme un UIView ou UIImageView avec un événement comme "retouche à l'intérieur"?

MISE À JOUR:

Dans mon View Controller qui crée le UIImageView j'ai essayé de le faire:

SEL actionSelector = @selector(doSomethingWhenImageIsTouched:); 
[self.myUIImageView addTarget:nil action:actionSelector forControlEvents:UIControlEventTouchUpInside]; 

Le compilateur me donne un avertissement, que UIImageView ne peut pas répondre à addTarget: ... ce dois-je faire pour que cela fonctionne avec un UIImageView. Je vois dans les docs que UIImageView n'hérite pas de UIControl, mais addTarget: fait partie de UIControl.

MISE À JOUR:

J'ai fini par créer un UIButton après la création du UIImageView. Ensuite, je définis le cadre de ce bouton sur le cadre de l'UIImageView, et alpha à 0.1f. Pour une raison quelconque, cela ne fonctionnera pas si alpha est 0.0f. Et puis, j'ai fait ce cool addTarget: chose ...

+0

Il serait plus approprié d'appeler les méthodes touchesBegan ou touchEnded et de vérifier la vue touchée là. – lostInTransit

+0

@lostInTransit - C'est ce que j'ai fait récemment. Fonctionne comme un charme. Peut-être pourriez-vous en faire une réponse? – Kriem

+1

En ce qui concerne l'alpha de 0.1, hitTest: withEvent: ignore les vues qui sont cachées, ont désactivé l'interaction utilisateur ou ont un alpha inférieur à 0.1 (voir hitTest sous UIView class reference) – progrmr

Répondre

0

Les UIViews n'ont généralement pas besoin de prises IBAction pour recevoir des événements tactiles. En règle générale, si une vue est sous le contrôle d'un viewController, vous pouvez vérifier les événements UITouch en utilisant les méthodes touchesBegan. Pour définir la cible et le sélecteur des actions de contrôle, vous pouvez également utiliser:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 
+0

Pour une raison qui ne fonctionne pas sur UIImageView. .. voir ma mise à jour ci-dessus – Thanks

+2

addTarget est une méthode UIControl. UIView n'est pas un UIControl. –

4

Dans la version 3.2 SDK (pourrait être antérieure i donno), vous pouvez ajouter geste de reconnaissance à un UIView. UIGestureRecogniser est une classe abstraite qui vous permet de définir un geste (tapoter, pincer, balayer, etc.) et de l'ajouter à un UIView et lorsque le reconnaissance de geste, reconnaît le geste, il déclenche une action sur une cible de votre désir.

lire tout cela dans les docs ...: D

1

Il est impossible d'utiliser le modèle cible-action ici parce que UIImageView n'est pas hérité de UIControl comme UIButton il est dérivé de UIView. Donc, si vous voulez suivre les touches sur les vues ou les vues de l'image, vous devez d'abord faire une classe personnalisée, puis placez l'événement tactile commencé et effectuez l'opération. Sinon, utilisez UIGestures qui peut vous aider

Questions connexes