2012-07-20 13 views
34

Siento que esta es probablemente una pregunta estúpida ... pero de todos modos tengo este tipo de comportamiento extraño del título UIButton.El título de UIButton cambia a la predeterminada

El botón está configurado y conectado tanto a una acción como a una propiedad en IB (la acción es startButtonPushed y la propiedad es startButton). Dentro del controlador de vista tengo la acción establecido así:

bool buttonStateStop; 

- (IBAction)startPushed:(id)sender 
{ 
    if (buttonStateStop) 
    { 
     [appD.locationManager stopSavingLocations]; 
     startButton.titleLabel.text = @"Start"; 
     buttonStateStop = NO; 
    } 
    else 
    { 
     [appD.locationManager startSavingLocations]; 
     startButton.titleLabel.text = @"Stop"; 
     buttonStateStop = YES;   
    } 
} 

Originalmente, tenía el título predeterminado en IB ajustado en "Inicio" pero cada vez que pulse el botón, cambiaría a "Stop" para una fracción de un segundo y luego de vuelta. Pasé un tiempo tratando de descubrir por qué el título seguía retrocediendo a "Comenzar". Eventualmente cambié el título del IB a "xxxxxx" y me di cuenta de que no importa qué, el título del IB se reafirma inmediatamente después de que cambie el título del botón.

Así que la pregunta es: ¿por qué IB sigue cambiando el título del botón a su valor predeterminado? Nunca me he encontrado con este comportamiento antes. Y (obviamente) ¿cómo puedo solucionarlo?

Información adicional: las únicas referencias al botón son @property, @synthesize, y las declaraciones en el código anterior. La vista está dentro de un controlador de navegación.

Respuesta

65

Es necesario utilizar setTitle:forState: método en lugar de establecer la propiedad titleLabel.text:

[startButton setTitle:@"Start" forState:UIControlStateNormal]; 
// Normal and highlighted titles do not need to be the same 
[startButton setTitle:@"Start!" forState:UIControlStateHighlighted]; 

Lo que sucede ahora es que se establece el título en la etiqueta que representa la visión de la situación actual, pero una vez que los cambios de estado de empujado a normal, el botón restablece la etiqueta de nuevo al título para el nuevo estado (que es el texto que establece en el IB).

+0

Tienes razón, este era mi problema. Comportamiento muy extraño, ya que he hecho exactamente lo mismo sin ningún problema antes. – Dustin

+0

¡Es extraño cómo "a veces funciona"! el problema es que en el doco mencionan que cambias el ** estilo ** (etc.) del texto usando .titleLabel. ¡Qué lío! – Fattie

5

La versión rápida de esto es

startButton.setTitle("Start", forState: UIControlState.Normal) 
+0

ahora 'startButton.setTitle (" Start ", for: .normal)' hasta que lo vuelvan a cambiar – CupawnTae

Cuestiones relacionadas