web-dev-qa-db-fra.com

Gérer un événement tactile dans UILabel et le relier à un IBAction

Ok, donc j’ai un UILabel créé dans le générateur d’interface qui affiche du texte par défaut de "tapez pour commencer".

Lorsque l'utilisateur appuie sur UILabel, je souhaite qu'il déclenche une méthode IBAction: -(IBAction)next;, qui met à jour le texte sur l'étiquette pour indiquer quelque chose de nouveau.
Cela serait vraiment pratique si cela me permettait de simplement faire glisser une connexion de ma méthode vers mon étiquette, puis de sélectionner une retouche à l'intérieur, comme avec un bouton. mais hélas, pas de cigare.

de toute façon, je suppose que ma question est la suivante: vais-je devoir sous-classer UILabel pour que cela fonctionne? Ou est-il possible de faire glisser un bouton sur l'étiquette, mais de le rendre opaque à 0%? Ou y a-t-il une solution plus simple qui me manque?

100
wfbarksdale

Vérifiez-le:

UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
      [[UITapGestureRecognizer alloc] initWithTarget:self 
                                              action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];

L'astuce consiste à activer l'interaction utilisateur.

253
Scott Persinger

UILabel hérite de UIView qui hérite de UIResponder. Tous les objets UIresponder peuvent gérer des événements tactiles. Donc, dans votre fichier de classe qui connaît votre vue (qui contient le UIlabel), implémentez:

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;

Dans le générateur d'interface, définissez la valeur de la balise UILabel. lorsque des contacts se produisent dans votre méthode touchesBegan, vérifiez la valeur de balise de la vue à laquelle appartient la balise:

UITouch *touch = [touches anyObject];

if(touch.view.tag == MY_TAG_VAL)
label.text = @"new text";

Vous connectez votre code dans votre fichier de classe à l'objet UILabel dans le générateur d'interface en déclarant votre variable d'instance UILabel avec le préfixe IBOutlet:

IBOutlet UILabel *label;

Ensuite, dans le constructeur d'interface, vous pouvez les connecter.

70
Remover

Vous pouvez utiliser un bouton UIB, le rendre transparent, c'est-à-dire un type personnalisé sans image, et ajouter un UILabel dessus (au centre). Puis connectez les événements de bouton normaux.

30
Eiko

Swift

Vous avez un IBOutlet

@IBOutlet var label: UILabel!

Dans lequel vous activez l'interaction utilisateur et ajoutez un identificateur de mouvements

label.isUserInteractionEnabled = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(userDidTapLabel(tapGestureRecognizer:)))
label.addGestureRecognizer(tapGesture)

Et enfin, manipulez le robinet

func userDidTapLabel(tapGestureRecognizer: UITapGestureRecognizer) {
  // Your code goes here
}
16
César Cruz