2010-11-06 17 views
5

tengo el siguiente códigoacceder a UIButton por (id) emisor

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

que está vinculada a varios botones. Quiero ocultar el botón que activó este IBAction. self.hidden obviamente no es el botón.

¿Cómo se oculta el botón que se pulsó? El remitente.

Gracias

Respuesta

7

Enviar setHidden mensaje al remitente:

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

Intenté sender.hidden = YES; antes de publicar esto dio un error – jarryd

+0

¿qué exactamente es un error? – Vladimir

+0

Ok, .hidden da un error "no es una estructura o unión", pero [setHidden: YES] funciona;) – jarryd

2

su conseguir el objeto de botón (id) proporcionado como un parámetro

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

Tanto Vladimir y Henrik de las respuestas podrían ser correctas. No dejes que el tipo 'id' te asuste. Sigue siendo su objeto de botón, es solo que el compilador no sabe cuál es el tipo. Como tal, no puede hacer referencia a las propiedades en él a menos que se lo transfiera a un tipo específico (respuesta de Henrik).

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

O puede enviar ningún mensaje (llamar a cualquier método) en el objeto, suponiendo que conoce el tipo (que lo hace, es un botón), sin tener que emitir (respuesta de Vladimir).

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

Ambos métodos pueden arrojar un error: mi método podría lanzar un error de conversión y el método de Vladimirs podría arrojar un mensaje de error –

2

Si quieres prueba de balas fundido/mensajería, intente esto:

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

Creo que NSButton debería ser UIButton, pero sí, gracias por esto. –

0

Y ... si usted quiere cambiar el backgroundColor de un botón, el código correcto será así?

[sender setBackgroundColor:(NSColor *)redColor]; 

por ejemplo? ... porque no funciona para mi ...

Cuestiones relacionadas