2012-06-21 17 views
29

Tengo un UIButton que debería tener 2 estados: "Reproducir" y "Pausa"; es decir, la primera vez que el usuario lo ve dice "Reproducir" y luego, cada vez que el usuario hace clic en él, debe cambiar entre "Reproducir" y "Pausa".Cómo cambiar la propiedad textLabel en UIButton mediante programación en iOS?

Pude crear el controlador en sí mismo, el contenido se reproduce y pausó correctamente, pero parece que no puedo cambiar el texto de UIButton Text Label.

que utilizo:

myButton.titleLabel.text = @"Play"; 

myButton.titleLabel.text = @"Pause"; 

No está funcionando. El texto no está cambiando. También probé [myButton.titleLabel setText: @ "Pause"] y tampoco funciona.

¿Cómo puedo configurarlo?

Respuesta

66

Debería ser:

[myButton setTitle:@"Play" forState:UIControlStateNormal]; 

lo necesario para aprobar el state también. Puede consultar here.

A continuación, puede hacer algo como esto:

[myButton setTitle:@"Play" forState:UIControlStateNormal]; 
[myButton setTitle:@"Stop" forState:UIControlStateSelected]; 
1

Y si quieres cargarlo al cargar la página, y el idioma localizado apoyo:

-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    if (self.flagToChangeLabel){ 
     NSString* newBtnTitle = NSLocalizedString(@"LOCALIZED_KEY", nil); 
     [self.laterButton setTitle:newBtnTitle forState:UIControlStateNormal]; 
     [self.laterButton setTitle:newBtnTitle forState:UIControlStateSelected]; 
    } 
} 
2

He encontrado que esto es algo fuera de fecha desde que se agregaron las cadenas atribuidas. Aparentemente, los títulos de los botones asignados en un guión gráfico son cadenas atribuidas. Los títulos atribuidos tienen prioridad sobre los títulos NSString, por lo que si desea utilizar una cadena simple como título, primero debe eliminar el título atribuido. Hice lo siguiente, aunque puede haber una mejor manera. Por supuesto, podrías hacer que tu nuevo título sea una cadena atribuida.

[myButton setAttributedTitle: nil  forState: 0xffff]; 
[myButton   setTitle: @"Play" forState: UIControlStateNormal]; 
Cuestiones relacionadas