2012-09-04 31 views
5

Estaba un poco confundido al encontrar hoy que lo siguiente no funciona al intentar cambiar el texto que se muestra en un UIButton.Estableciendo titleLabel para UIButton

// 001 
[[[self button] titleLabel] setText:@"Peanuts"]; 

Creo que sé por qué, pero solo quería confirmar mi pensamiento aquí. 001 establece la propiedad titleLabel text, pero como es UILabel (una subvista del UIButton) no hace que la UI se vuelva a dibujar. Esto da como resultado un cambio interno en la propiedad de texto UILabel, pero lamentablemente no hay cambios visuales en la interfaz de usuario.

// 002 
[[self button]setTitle:@"Peanuts" forState:UIControlStateNormal]; 

parecería que el método setTitle: forState es la forma correcta de ir, tiene la sobrecarga adicional de requerir un estado pero invocar una interfaz de usuario redibujar porque su ser llamado directamente en la UIButton. Mi pregunta es, ¿002 es la forma correcta de hacer esto, parece que es a menos que esté haciendo algo totalmente incorrecto?

Respuesta

7

Estás en la correcta.

[[self button]setTitle:@"Peanuts" forState:UIControlStateNormal]; 

es la forma en que se deben establecer los títulos de los botones. Esto le permite controlar cómo se ve su botón en todos sus diferentes estados de control.

A partir de los documentos:

En general, si una propiedad no se especifica para un estado, el valor predeterminado es utilizar el valor UIControlStateNormal. Si no se establece el valor para UIControlStateNormal, la propiedad tiene un valor de sistema predeterminado de . Por lo tanto, como mínimo, debe establecer el valor para en el estado normal.

+0

Gracias, muy apreciado. – fuzzygoat

Cuestiones relacionadas