2010-03-17 5 views
10

Comment définir une balise pour un bouton par programme?Comment définir et obtenir l'étiquette de UIButtons?

Je veux plus tard comparer à des tags pour une conclusion

ive essayé cette

-(IBAction)buttonPressed:(id)sender{ 
NSLog(@"%d", [sender tag]); 
} 

mais simplement l'application se bloque .... :(

d'autres idées?

Cheers Guys

Sam

Répondre

13

Vous devez jeter l'expéditeur comme UIButton:

-(IBAction)buttonPressed:(id)sender{ 
UIButton *button = (UIButton *)sender; 
NSLog(@"%d", [button tag]); 
} 

Edit: En ce qui concerne le message « sélecteur non reconnu » ...

Sur la base de votre message d'erreur, il est pas en mesure d'appeler la méthode ButtonPressed dans la première place. Notez dans le message d'erreur qu'il recherche "buttonPressed" (pas de deux points à la fin) mais la méthode s'appelle "buttonPressed:". Si vous définissez la cible du bouton dans le code, assurez-vous que le sélecteur est réglé sur buttonPressed: au lieu de simplement buttonPressed. Si vous définissez la cible dans IB, le xib peut ne pas être synchronisé avec le code. En outre, votre code d'origine "[balise d'expéditeur]" doit également fonctionner, mais pour accéder aux propriétés spécifiques au bouton, vous devez toujours le convertir en UIButton.

+0

se plante encore ... :( –

+0

2010-03-17 16: 07: 35,322 mémoire [37490: 207] *** - [MemoryViewController ButtonPressed]: sélecteur non reconnu envoyé à l'instance 0x3b08cb0 2010-03-17 16: 07: 35.324 Mémoire [37490: 207] *** Application terminaison due à une exception non interceptée 'NSInvalidArgumentException', raison: '*** - [MemoryViewController buttonPressed]: sélecteur non reconnu envoyé à l'instance 0x3b08cb0' pile ... –

+1

[tag de bouton] devrait fonctionner.Veuillez voir les modifications à la réponse – DyingCactus

5

Je sais que c'est une vieille question et a été répondu à plusieurs reprises dans d'autres questions, mais il est venu dans une recherche google comme deuxième à partir du haut. Donc, voici la réponse à pourquoi il s'écrase. Changez-le en 'button.tag'

-(void)myMethod 
{ 
    UIButton *theButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [theButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown]; 

    theButton.tag = i;//or whatever value you want. In my case it was in a forloop 

} 

-(void)buttonPressed:(id)sender 
{ 
    UIButton *button = (UIButton *)sender; 
    NSLog(@"%d", button.tag); 
} 
+0

Cela fonctionne! Mais il est étrange que [bouton tag] planter! N'est-il pas [] plus natif comparer avec la notation? – sooon

+0

@ sooon: button.tag est implémenté en interne ed comme [bouton getTag] et [bouton setTag:]. Comme il n'y a pas réellement de fonction "tag", il se bloque. – prewett

-1

Pas besoin de coulée. Cela devrait fonctionner:

-(IBAction)buttonPressed:(UIButton*)sender 
{ 
NSLog(@"%d", [sender tag]); 
} 
Questions connexes