2010-11-06 3 views
5

Je le code suivantaccès UIButton par (id) sender

-(IBAction)ATapped:(id)sender{ 
//want some way to hide the button which is tapped 
self.hidden = YES; 
} 

qui est lié à plusieurs boutons. Je veux cacher le bouton qui a déclenché cette IBAction. self.hidden n'est évidemment pas le bouton.

Comment cacher le bouton qui a été tapoté? L'expéditeur.

Merci

Répondre

7

Envoyer setHidden un message à l'expéditeur:

-(IBAction)ATapped:(id)sender{ 
    //want some way to hide the button which is tapped 
    [sender setHidden:YES]; 
} 
+0

J'ai essayé sender.hidden = YES; avant que je posté ceci. il a donné une erreur. – jarryd

+0

quoi exactement erreur? – Vladimir

+0

Ok, .hidden donne une erreur "pas une structure ou un syndicat", mais [setHidden: YES] fonctionne;) – jarryd

2

Votre obtenir l'objet bouton (id) fourni en tant que paramètre

-(IBAction)ATapped:(id)sender{ 
    // Possible Cast 
    UIButton* myButton = (UIButton*)sender; 
    myButton.hidden = YES; 
} 
12

Les deux réponses de Vladimir et Henrik seraient corrects. Ne laissez pas le type 'id' vous effrayer. C'est toujours votre objet bouton, c'est juste que le compilateur ne sait pas quel est le type. En tant que tel, vous ne pouvez pas y faire référence à moins d'être casté dans un type spécifique (réponse d'Henrik).

-(IBAction)ATapped:(id)sender{ 
    // Possible Cast 
    UIButton* myButton = (UIButton*)sender; 
    myButton.hidden = YES; 
} 

Ou vous pouvez envoyer tout message (appeler une méthode) sur l'objet, en supposant que vous connaissez le type (que vous faites, c'est un bouton), sans avoir à jeter (la réponse de Vladimir).

-(IBAction)ATapped:(id)sender{ 
    //want some way to hide the button which is tapped 
    [sender setHidden:YES]; 
} 
+0

Les deux méthodes peuvent lancer une erreur: ma méthode pourrait lancer une erreur de casting et Vladimirs méthode pourrait jeter une erreur de messagerie –

2

Si vous voulez l'épreuve des balles CAST/messagerie, essayez ceci:

-(IBAction)ATapped:(id)sender{ 
    // Secure Cast of sender to UIButton 
    if ([sender isKindOfClass:[UIButton class]]) { 
     UIButton* myButton = (UIButton*)sender; 
     myButton.hidden = YES; 
    } 
} 
+0

Je crois que NSButton devrait être UIButton, mais oui, merci pour cela. –

0

Et ... si vous voulez changer le backgroundcolor d'un bouton, le code correct sera comme ça?

[sender setBackgroundColor:(NSColor *)redColor]; 

par exemple? ... parce qu'il ne fonctionne pas pour mon ...