Question

Ok, donc j'ai un UILabel créé dans le constructeur d'interface qui affiche quelques uns de texte par défaut de « tap pour commencer ».

Lorsque l'utilisateur tape le UILabel Je veux déclencher une méthode IBAction: -(IBAction)next; qui met à jour le texte sur l'étiquette pour dire quelque chose de nouveau.
Il serait vraiment pratique si cela m'a permis de simplement faire glisser une connexion de ma méthode à mon étiquette, puis sélectionnez toucher à l'intérieur, comme un bouton. mais hélas, pas de cigare.

De toute façon, je suppose que ma question est, je vais devoir sous-classe UILabel pour obtenir ce travail? Ou est-il une façon que je peux faire glisser un bouton sur l'étiquette, mais le rendre opaque 0%. Ou est-il une solution plus simple que je suis absent?

Était-ce utile?

La solution

Check it out:

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

L'astuce est de permettre une interaction utilisateur.

Autres conseils

UILabel hérite de UIView qui hérite de UIResponder. Tous les objets UIResponder peuvent gérer les événements tactiles. Donc, dans votre fichier de classe qui connaît votre point de vue (qui contient le UILabel) mettre en œuvre:

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

Dans le constructeur d'interface définir la valeur de la variable de la UILabel. lorsque des touches se produisent dans votre méthode de touchesBegan, vérifiez la valeur de la variable 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 avec l'objet UILabel dans le constructeur d'interface en déclarant votre variable d'instance UILabel avec le préfixe IBOutlet:

IBOutlet UILabel *label;

Ensuite, dans l'interface constructeur, vous pouvez les relier.

Vous pouvez utiliser un UIButton, la rendre transparente, à savoir le type personnalisé sans une image, et ajouter un UILabel sur elle (centrée). câbler ensuite les événements de bouton normal.

Swift 3

Vous avez un IBOutlet

@IBOutlet var label: UILabel!

Dans lequel vous activez l'interaction de l'utilisateur et d'ajouter un geste de reconnaissance

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

Et enfin, gérer le robinet

func userDidTapLabel(tapGestureRecognizer: UITapGestureRecognizer) {
  // Your code goes here
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top