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?
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.
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.
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.
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
}