web-dev-qa-db-fra.com

Événements UIButton. Quelle est la différence?

J'ai rencontré un problème où mon bouton doit rester "enfoncé" pendant qu'il affiche un popover appelé depuis celui-ci. Popover est un sélecteur pour certains filtres et le filtre est affiché sur le bouton lui-même. Lorsque j'appuie dessus et qu'il s'affiche, il est désélectionné quoi qu'il arrive.

Je pense que je dois redéfinir son comportement lors d'un événement tactile et le faire réagir non pas au standart touch up inside. Alors je me suis demandé de quoi d'autres événements étaient-ils responsables? Mais je n'ai pas pu trouver la liste des événements dans la bibliothèque iOS et dans StackOverflow ne sont que des questions sur le comportement incorrect de touch up inside ou touch down.

Alors, quelle est la différence entre les événements tactiles?

  1. touchez annuler - lorsque vous touchez le bouton mais éloignez votre doigt et qu'il reste désélectionné?
  2. toucher vers le bas - à droite sur le robinet.
  3. atterrir répéter ??
  4. toucher glisser entrer ??
  5. toucher glisser sortie ??
  6. toucher glisser à l'intérieur ??
  7. toucher glisser dehors ??
  8. retouchez à l'intérieur - lorsque vous appuyez et relâchez le bouton restant dans ses limites. Il change l'état des boutons UIB en Normal.
  9. retoucher à l'extérieur - lorsque vous appuyez et relâchez le bouton en laissant ses limites?

d'autres IBActions ne sont pas envoyées par UIButton, non? Aussi comment ces événements changent-ils l'apparence d'UIButton? Comme highlighted ou selected?

J'apprécierais un lien sur un bon article sur IBActions, car je ne l'ai pas trouvé.

58
Protheus

De doc d'Apple pour UIControlEvents :

  1. UIControlEventTouchCancel

    Un événement système annulant les contacts actuels pour le contrôle.

  2. UIControlEventTouchDown

    Un événement de toucher des roues dans le contrôle.

  3. UIControlEventTouchDownRepeat

    Un événement de toucher du sol répété dans le contrôle; pour cet événement, la valeur de la méthode tapCount UITouch est supérieure à un.

  4. UIControlEventTouchDragEnter

    Un événement où un doigt est glissé dans les limites du contrôle.

  5. UIControlEventTouchDragExit

    Un événement où un doigt est déplacé de l'intérieur d'un contrôle vers l'extérieur de ses limites.

  6. UIControlEventTouchDragInside

    Un événement où un doigt est glissé à l'intérieur des limites du contrôle.

  7. UIControlEventTouchDragOutside

    Un événement où un doigt est glissé juste en dehors des limites du contrôle.

  8. UIControlEventTouchUpInside

    Un événement de retouche dans le contrôle où le doigt est à l'intérieur des limites du contrôle.

  9. UIControlEventTouchUpOutside

    Un événement de retouche dans le contrôle où le doigt est en dehors des limites du contrôle.

141
Protheus

Énuméré, ce que je considérerais, ordre d'utilisation courante/probabilité d'occurrence pour un bouton normal:

UIControlEventTouchDown : l'utilisateur a appuyé sur le bouton. Cela se déclenche sur le doigt/stylet en contact.

UIControlEventTouchUpInside : l'utilisateur a appuyé sur le bouton. Cela se déclenche sur le contact doigt/stylet éloigné de l'écran.


Utile pour les curseurs et les événements de glisser comme le déplacement d'un composant. Les éléments ci-dessous sont par ordre d'occurrence:

UIControlEventTouchDragInside : déclenché lorsque le doigt glisse dans la zone des boutons.

UIControlEventTouchDragExit : déclenché pendant un mouvement de glissement. Il n'est appelé qu'une seule fois, car le doigt/stylet de l'utilisateur quitte les limites du bouton.

UIControlEventTouchDragOutside : déclenché pendant un mouvement de glissement, après 'UIControlEventTouchDragExit' et est appelé en continu , tant que la touche d'origine continue.

UIControlEventTouchUpOutside : il s'agit simplement du doigt/stylet levé MAIS uniquement si le doigt/stylet n'est plus dans les limites du bouton. La chose importante (et probablement évidemment) à appeler est que le contact devait avoir été à l'intérieur du bouton à un moment donné pour associer cet événement au bouton.

Remarque: Je crois comprendre que ce qui précède peut être utile pour:

  1. Curseurs: comme vous vous en doutez, le toucher peut avoir été intentionnel, mais en raison de l'action de balayage rapide, le mouvement de leurs doigts peut être bâclé et se soulever à l'extérieur de la zone du curseur.
  2. Déplacement de composants, comme lorsque vous poussez des objets sur un écran, vous souhaitez que le mouvement se produise lorsque le doigt/stylet touche la bordure du composant/objet.

D'autres évènements:

UIControlEventTouchCancel : quelque chose hors du contrôle de l'utilisateur annule son action tactile. Considérez cela comme quelque chose qui "va mal" du côté des téléphones.

UIControlEventTouchDownRepeat : Vous voulez détecter quand votre utilisateur est fou et en tapant furieusement sur un bouton? Vous voulez détecter s'ils sont toujours en mode Windows et essayez de "double-cliquer"? Ou peut-être avez-vous conçu un bouton pour faire quelque chose de différent s'il tape deux fois. Cet événement aide à tout cela!


Les références:

SO 1 : Dif entre UIControlEventTouchDragOutside et UIControlEventTouchDragExit

SO 2 : Qu'est-ce que UIControlEventTouchCancel?

2
Dave G