2010-03-17 14 views
10

¿Cómo configuro una etiqueta para un botón mediante programación?¿Cómo configuro y obtengo la etiqueta de UIButtons?

tarde quiero comparar a etiquetas para una conclusión

he intentado esto

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

pero eso sólo se bloquea la aplicación .... :(

alguna otra idea?

Cheers Guys

Sam

Respuesta

13

, es necesario especificar el remitente como UIButton:

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

Editar: En relación con el mensaje "selector no reconocido" ...

Sobre la base de su mensaje de error, no es capaz de llamar al método en buttonPressed El primer lugar. Observe en el mensaje de error que está buscando "buttonPressed" (sin dos puntos al final) pero el método se llama "buttonPressed:". Si está configurando el objetivo del botón en el código, asegúrese de que el selector esté configurado como buttonPressed: en lugar de solo buttonPressed. Si está configurando el objetivo en IB, el xib puede estar fuera de sincronización con el código.

Además, su código original "[sender tag]" también debería funcionar, pero para acceder a las propiedades específicas del botón, igual deberá enviarlo a UIButton.

+0

vuelve a colgarse ... :( –

+0

2010-03-17 16: 07: 35.322 Memoria [37490: 207] *** - [MemoryViewController buttonPressed]: Selector no reconocido enviado a la instancia 0x3b08cb0 2010-03-17 16: 07: 35.324 Memoria [37490: 207] *** Aplicación de finalización debido a la excepción no detectada 'NSInvalidArgumentException', razón: '*** - [MemoryViewController buttonPressed]: selector no reconocido enviado a la instancia 0x3b08cb0' apilar .... –

+1

[la etiqueta del botón] debería funcionar. Consulte las ediciones de la respuesta – DyingCactus

5

Sé que esta es una vieja pregunta y ha sido respondida muchas veces en otras preguntas, pero apareció en una búsqueda de google como segundo desde la parte superior. Entonces, aquí está la respuesta a por qué estaba fallando. Cambiarlo a '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

¡Funciona! ¡Pero es extraño que la [etiqueta del botón] se bloquee! ¿No es [] una comparación más nativa con la notación? – sooon

+0

@ sooon: button.tag es implementar internamente ed como [button getTag] y [button setTag:]. Como no hay realmente una función de "etiqueta", se bloquea. – prewett

-1

No necesita de fundición. Esto debería funcionar:

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