2010-11-06 7 views
5

Ho il seguente codiceaccesso UIButton da (id) sender

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

che è legata a più pulsanti. Voglio nascondere il pulsante che ha attivato questa IBAction. self.hidden non è ovviamente il pulsante.

Come nascondere il pulsante che è stato toccato? Il mittente.

Grazie

risposta

7

Invia setHidden messaggio al mittente:

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

Ho provato sender.hidden = YES; prima ho postato questo. ha dato un errore. – jarryd

+0

quale errore esattamente? – Vladimir

+0

Ok, .hidden restituisce un errore "non una struttura o unione", ma [setHidden: YES] funziona;) – jarryd

2

vostro ottenere l'oggetto pulsante (id) fornita come parametro

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

Sia Vladimir e Henrik delle risposte sarebbero corrette. Non lasciare che il tipo 'id' ti spaventi. È ancora il tuo oggetto pulsante è solo che il compilatore non sa di che tipo si tratta. In quanto tale, non è possibile fare riferimento a proprietà su di esso a meno che non venga eseguito il cast di un tipo specifico (risposta di Henrik).

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

Oppure è possibile inviare qualsiasi messaggio (chiamare qualsiasi metodo) sull'oggetto, supponendo che si conosce il tipo (che si fa, si tratta di un pulsante), senza dover lanciare (risposta di Vladimir).

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

Entrambi i metodi possono generare un errore: il mio metodo potrebbe lanciare un errore di cast e il metodo Vladimirs potrebbe lanciare un errore di messaggistica –

2

Se si vuole a prova di proiettile fusione/messaggistica, provate questo:

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

Credo che NSButton dovrebbe essere UIButton, ma sì, grazie per questo. –

0

E ... se si desidera modificare il colore di sfondo di un pulsante, il codice corretto sarà così?

[sender setBackgroundColor:(NSColor *)redColor]; 

per esempio? ... perché non funziona per il mio ...