2013-05-09 6 views
0

Je rencontre un problème avec l'action sur mes UIButtons. Je crée 4 boutons par programmation, mais je ne suis pas en mesure de déclencher l'événement TouchUpInside.Impossible de définir par programme l'action UIButton

J'ai déjà lu un article, mais j'ai toujours des problèmes, donc les pointeurs seront grandement appréciés!

Voici le code où je crée et mis le bouton et il est l'action:

UIButton *btn; 

float newWidth = 10; 

for (int i = 0; i < _btnImages.count; ++i) { 
    btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    CGRect imageFrame = CGRectMake(/*X*/newWidth, /*Y*/height - 80, 65, 65); 
    btn.frame = imageFrame; 
    btn.tag = i; 

    [btn setBackgroundImage:[UIImage imageNamed:[_btnImages objectAtIndex:i]] forState:UIControlStateNormal]; 
    [btn addTarget:self 
      action:@selector(btnSelected:) 
      forControlEvents:UIControlEventTouchUpInside]; 
    [btn setEnabled:true]; 

    [self addSubview:btn]; 
    newWidth = newWidth + 75; 
} 

et voici la méthode btnSelected:

-(void)btnSelected:(UIButton *)button 
{ 
    NSLog(@"Button %ld Clicked",(long int)[button tag]); 
} 
+0

pouvez-vous vérifier si les images sont ajoutées dans la vue. Il y a une chance qu'ils ne le soient pas. – Anupdas

+0

Où la boucle for est-elle fermée? Vous n'apportez aucune modification aux positions x et y, donc les boutons sont ajoutés les uns au-dessus des autres. Pouvez-vous clarifier s'il vous plaît? – Mohith

+0

Désolé Mohith, je pensais que j'ai ajouté tout ici mais manqué où je me déplace sur l'axe x et ferme la boucle for! – donpisci

Répondre

7

Le code que vous avez indiqué est correct. Les problèmes possibles sont les suivantes:

  1. Vous ajoutez les boutons en vue qui a l'interaction utilisateur désactivé (ou l'un de ses ancêtres a une interaction utilisateur désactivé).

  2. Vos boutons sont coupés par leur aperçu. Assurez-vous que vos boutons sont à l'intérieur des limites de leur vue d'ensemble (et la vue d'ensemble est à l'intérieur des limites de son aperçu, etc.).

  3. D'autres problèmes peuvent se produire lorsqu'il existe des reconnaisseurs de mouvements sur vos vues - ils peuvent retarder les touches & dans les sous-vues, y compris les boutons. Assurez-vous que l'événement tactile n'est pas géré par un outil de reconnaissance de gestes.

+0

Pensez que c'était un problème avec la vue d'ensemble car j'ai créé les boutons dans viewController.m et ils fonctionnent maintenant, merci pour votre aide! – donpisci

0

également UIControlEventTouchUpInside est déclenché lorsque u relâchez le bouton de l'intérieur des limites du bouton ... il peut être un peu délicat, mais si notion que vous appuyez sur le bouton et relâchez à l'extérieur des limites du bouton, cet événement de contrôle ne se déclenchera pas.

UIControlEventTouchUpInside A touch-up event in the control where the finger is inside the bounds of the control. Available in iOS 2.0 and later. Declared in UIControl.h.

Questions connexes