2011-11-03 18 views
6

estoy personalización de la programación UIButton aquí:¿Cuál es el UIControlState correcto para el UIButton que se está presionando?

button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [button setSelected:YES]; 
     button.frame = CGRectMake(x, y, width, height); 
     [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
     [button setTitleColor:[UIColor blueColor] forState:UIControlStateSelected]; 
     [button setTitle:@"Button Title" forState:UIControlStateNormal]; 
     [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; 
     [button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal]; 
     [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateSelected]; 
     [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateHighlighted]; 
     [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateDisabled]; 

La cuestión es si estoy la imagen como imagen de fondo manteniendo pulsado desaparece hasta que me soltarlo ...

Respuesta

8

Creo que eres en modo overkill :). Intenta configurar button.png para UIControlStateNormal y buttonActive.png para UIControlStateHighlighted. No es necesario para el resto. Mira si esto funciona

EDIT:

Además, recuerde: los nombres de archivo imagen entre mayúsculas y minúsculas

¿Está poniendo a prueba en el dispositivo? Los nombres de las imágenes distinguen entre mayúsculas y minúsculas para compilaciones de dispositivos, pero no para el simulador. Por ejemplo, si su archivo de imagen real se llama buttonactive.png, pero lo está llamando como buttonActive.png desde su código, aparecerá en el simulador, pero no en el dispositivo.

Asegúrese de que la carcasa de ambos nombres de imagen coincida con el nombre del archivo real.

editar # 2:

probar este código

button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button setSelected:YES]; 
    button.frame = CGRectMake(x, y, width, height); 
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
    [button setTitleColor:[UIColor blueColor] forState:UIControlStateSelected]; 
    [button setTitle:@"Button Title" forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; 
    [button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal]; 
    [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateHighlighted]; 
+1

debo añadir que los nombres de archivo de imagen entre mayúsculas y minúsculas en una Dispositivo, pero NO en el simulador. Esto me hizo rascarme la cabeza un par de veces :) – Keller

+0

@Sid: Sé que ** los nombres de las imágenes distinguen entre mayúsculas y minúsculas **. Estoy probando en el simulador de iPhone pero debería reaccionar de la misma manera ... –

+0

@Keller: :) ... – Sid

3

entenderlo, funciona de esta manera:

[_whateverButtonTab setBackgroundImage:[UIImage imageNamed:@"ActivateButton.png"] forState:UIControlStateSelected]; 
[_whateverButtonTab setBackgroundImage:[UIImage imageNamed:@"ActivateButton.png"] forState:(UIControlStateHighlighted|UIControlStateSelected)]; 
-2

A pesar de que añadir un botón de IDE

muestra:

.h file 
-(IBAction)BtnAdd:(id)sender 

en .m archivo es

-(IBAction)BtnAdd:(id)sender 
{ 
} 

Es un método que no se puede activar o desactivar.

por lo que si desea habilitar o deshabilitar el botón que sea lo más -(IBOutlet)BtnAdd añadir IBOutlet a .h archivo y conectarlo con el botón en particular continuación BtnAdd.enabled=NO funcionará

Cuestiones relacionadas