1 votes

Comportement étrange de UIButton : Est-ce normal ?

J'ai un simple UIButton et je veux faire quelque chose lorsque l'utilisateur le touche, mais qu'il déplace ensuite son doigt en dehors du bouton et qu'il détache l'écran. Il semble donc que je doive écouter l'événement UIControlEventTouchUpOutside.

Dans mon contrôleur de vue, j'ai fait ceci :

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");
}

Maintenant, devinez quoi ? Je touche le bouton, puis je fais glisser le doigt en dehors de celui-ci, je ne touche pas l'écran et aucun message n'est enregistré. En fait, l'événement UIControlEventTouchUpInside a été enregistré, même si mon doigt n'est pas vraiment au-dessus du bouton. Il semble que je puisse déplacer le doigt à environ 150% de la largeur et de la hauteur autour du bouton tout en le touchant, et le système me dira que le doigt était dans le bouton lorsque je le retire. Mais lorsque je le déplace très loin (= assez loin), j'obtiens le message "touchUpOutside". Alors est-ce que c'est juste une autre folie d'Apple, comme le délai dans -touchesMoved et d'autres choses comme ça ? Ou est-ce que j'ai fait quelque chose de mal ?

2voto

Je me suis rendu compte que c'est un comportement normal de UIKit. Étrange, mais normal. L'utilisateur doit éloigner suffisamment son doigt pour "annuler" une touche. Si le doigt n'est pas assez éloigné du bouton touché, et qu'il est soulevé, alors un événement touchUpInside est déclenché. Je n'ai pas trouvé de texte d'Apple disant cela, mais j'ai testé plusieurs fois dans plusieurs projets, y compris un tout nouveau projet avec un simple UIButton et un IBAction. Certains exemples de code d'Apple montrent également ce même comportement étrange.

2voto

iKenndac Points 14855

touchUpInside est déclenché lorsque vous déplacez votre doigt un peu en dehors du bouton, car les gens ont de gros doigts imprécis.

Si vous voulez vraiment remplacer ce comportement, dans un fichier touchUpInside vérifie l'emplacement de la touche, puis appelle la fonction touchUpOutside directement si la touche se trouve en dehors de la zone d'action du bouton. bounds .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X