2009-08-19 6 views
1

J'ai un simple UIButton et je veux faire quelque chose lorsque l'utilisateur le touche, mais ensuite déplace le doigt à l'extérieur du bouton et ouvre l'écran. Donc, il semble que j'ai besoin d'écouter l'événement UIControlEventTouchUpOutside.Comportement UIButton étrange: Est-ce normal?

Dans mon contrôleur de vue, je l'ai fait:

UIButton *bt = [[UIButton alloc] initWithFrame:rect]; 
[bt setBackgroundColor:[UIColor whiteColor]]; 
[bt addTarget:self action:@selector(onTouchUpOutside) forControlEvents:UIControlEventTouchUpOutside]; 
[self.view addSubview:bt]; 

et la méthode d'action correspondante:

- (void)onTouchUpOutside { 
    NSLog(@"touchUpOutside"); 
} 

deviner maintenant quoi? Je touche le bouton, puis fais glisser le doigt à l'extérieur, déconnecte l'écran et aucun message n'est enregistré. En effet, cela signifierait qu'un événement UIControlEventTouchUpInside s'est produit, même si mon doigt n'est pas vraiment au-dessus du bouton. Il me semble que je peux bouger le doigt à environ 150% de la largeur et la hauteur autour de ce bouton en touchant, et il me dira que le doigt était dans le bouton quand je l'ai touché. Mais quand je le déplace très loin (= assez loin), j'obtiens ce message de journal "touchUpOutside". Donc, est-ce juste une autre folie de la pomme, comme le retard dans -touchesMoved et des trucs comme ça? Ou ai-je fait quelque chose de mal?

Répondre

2

J'ai compris que cela se produisait normalement comportement UIKit. Étrange, mais normal. L'utilisateur doit éloigner suffisamment le doigt pour "annuler" un contact. Si le doigt n'est pas assez éloigné du bouton touché et du liftet, un événement TouchUpInside est déclenché. N'a pas pu trouver le texte d'Apple en disant cela, mais j'ai testé plusieurs fois dans plusieurs projets, y compris un tout nouveau avec un simple UIButton et un IBAction. Aussi un exemple de code d'Apple montre ce même comportement étrange.

2

touchUpInside est déclenché lorsque vous déplacez légèrement votre doigt en dehors du bouton, car les personnes ont de gros doigts imprécis.

Si vous voulez vraiment modifier ce comportement, dans un gestionnaire touchUpInside vérifier l'emplacement du contact, puis appelez le gestionnaire touchUpOutside directement si le contact à l'extérieur de bounds le bouton.

+0

ok donc c'est à cause de la facilité d'utilisation ... Je me demande juste pourquoi cette zone est si énorme énorme ;-) –

+2

Les gens ont des doigts plus gros que vous ne le pensez, aussi ils sont plus bêtes. –