Question

Je me demande si quelqu'un a déjà utilisé la méthode userInteractionEnabled sur un UILabel pour permettre à l'étiquette de se comporter comme un bouton (ou simplement d'activer une méthode). Toute aide serait grandement appréciée. À la vôtre!

Mise à jour (30/04/09 à 13 h 07) Clarification: je dispose d’un bouton d’information standard et, à côté, je souhaite placer une étiquette avec le texte "paramètres". et j'aimerais que l'étiquette fonctionne comme le bouton (qui bascule vers un écran de paramètres. Donc, je dois lier le showSettinsView déjà défini à l'étiquette "infoLabel"; un utilisateur clique sur l'infoButton ou l'infoLabel et la méthode se déclenche.

L'infoButton fonctionne déjà et utilise un IBAction pour déclencher la méthode. J'aimerais savoir comment raccorder l'étiquette pour mettre en œuvre la même méthode. C'est tout. À la vôtre!

Était-ce utile?

La solution

userInteractionEnabled n'est pas une méthode mais une propriété. Mais je pense que vous voudrez définir YES pour permettre aux événements d’atteindre la vue UIView .

Ce que vous pourriez vouloir faire est de remplacer la méthode toucheBegan: withEvent: de UIView qui contient votre UIButton et UILabel sous-vues.

Dans cette méthode, teste si l'une des touches UITouch se situe dans les limites de UILabel .

En d'autres termes, l'élément CGPoint [touch locationInView] est-il en intersection avec l'élément CGRect [infoLabel bounds] ? Examinez la fonction CGRectContainsPoint pour exécuter ce test.

Si tel est le cas, déclenchez un NSNotification qui appelle le même sélecteur IBAction que le UIButton .

Autres conseils

Une autre solution pourrait être d’utiliser un UIButton dont le type est défini sur custom au lieu d’un UILabel . Ainsi, votre deuxième bouton ressemblera à un UILabel et vous pourrez le configurer pour déclencher la méthode showSettingsView .

Je suis d’accord avec Alex le 30 avril 2009 et ma proposition n’est qu’un ajout, si vous ne voulez pas utiliser un bouton UIButton. J'ai résolu le problème en créant un UILabel via

- (id)initWithFrame:(CGRect)frame
{
    label = [[UILabel alloc] initWithFrame: CGRectMake(5, 5, 20, 20)];
    ...
    [label setUserInteractionEnabled: YES];
    [self addSubview: label];
}

alors vous pouvez remplacer les méthodes de touches * telles que touchesBegan, touchesEnded avec quelque chose comme

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
      UITouch *touch = [touches anyObject];
      if([touch view] == label) {
          NSLog(@"I've been touched");
       }
   }     
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top