Pregunta

Tengo un UIButton , que cuando se presiona, muestra una nueva vista donde el usuario puede cambiar algunas configuraciones. Cuando se cierra la vista, me gustaría actualizar el título / texto del UIButton para reflejar el nuevo estado. Estoy llamando:

[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];

Pero parece que nunca cambia del texto / título original como se especifica en IB.

¿Fue útil?

Solución

¿Tiene el botón especificado como IBOutlet en su clase de controlador de vista, y está conectado correctamente como una salida en Interface Builder (ctrl arrastre desde la nueva salida de referencia al propietario del archivo y seleccione su objeto UIButton)? Ese suele ser el problema que tengo cuando veo estos síntomas.


Editar: si bien no es el caso aquí, algo así también puede suceder si configura un título atribuido al botón, luego intenta cambiar el título y no el título atribuido.

Otros consejos

Resolví el problema simplemente configurando el parámetro de título para UIControlStateNormal, y funciona automáticamente en los otros estados. El problema parece ser cuando configura otro UIControlState.

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

Descubrí otro problema. Puede ser un error introducido en iOS 5, pero pensé en señalarlo a cualquiera que lo encuentre.

Si no configura ningún texto predeterminado para el botón en el XIB, no aparecerá ningún texto si lo configura mediante programación. Y si configura el texto en el XIB, cualquier texto que asigne posteriormente al botón mediante programación se truncará al tamaño del texto predeterminado.

Y finalmente, si está mostrando la vista con su botón y luego invoca otra vista (como una Hoja de acción) y luego la descarta, el texto que asignó al botón mediante programación se borrará y el título del botón volverá a lo que haya configurado en el XIB.

Aunque el problema de Caffeine Coma se resolvió, me gustaría ofrecer otra posible causa para que el título no aparezca en un UIButton.

Si configura una imagen para el UIButton usando

- (void)setImage:(UIImage *)image forState:(UIControlState)state

Puede cubrir el título. Descubrí esto de la manera difícil e imagino que algunos de ustedes terminan leyendo esta página por la misma razón.

Utilice este método en su lugar

- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state

para la imagen del botón y el título no se verá afectado.

Probé esto con botones creados mediante programación y botones creados en un .xib

A partir de Swift 4:

    button.setTitle("Click", for: .normal)

para swift:

button.setTitle("Swift", forState: UIControlState.Normal)                   

¡Resulta que los documentos te dicen la respuesta! El UIButton ignorará el cambio de título si ya tiene una Cadena Atribuida para usar (parece ser el valor predeterminado que se obtiene al usar el generador de interfaz Xcode).

Usé lo siguiente:

[self.loginButton 
     setAttributedTitle:[[NSAttributedString alloc] initWithString:@"Error !!!" attributes:nil] 
     forState:UIControlStateDisabled];
[self.loginButton setEnabled:NO];

Una posible causa más es esta:

Si intenta establecer el título del botón en el método (id) initWithNibName: ... , la propiedad de su botón seguirá siendo nula. Todavía no se ha asignado al UIButton.

Debe asegurarse de configurar sus botones en un método como (void) viewWillLoad o (void) viewWillAppear , pero probablemente no quiera configúrelos tan tarde como (void) viewDidAppear .

A veces puede ser realmente complicado. La manera fácil es " actualizar " la vista de botones!

//Do stuff to your button here.  For example:

[mybutton setEnabled:YES];

//Refresh it to new state.

[mybutton setNeedsDisplay];

Seguí teniendo problemas con esto, la única solución era agregar una imagen y una etiqueta como subvistas al uibutton. Luego descubrí que el problema principal era que estaba usando un UIButton con título: Atribuido. ¡Cuando lo cambié a Normal, solo configuré el títuloLabel.text fue el truco!

@funroll tiene toda la razón. Aquí puede ver lo que necesitará Asegúrese de que la función se ejecute solo en el subproceso principal . Si no desea lidiar con subprocesos, puede hacer esto, por ejemplo: crear NSUserDefaults y en ViewDidLoad se presionó el botón de verificación en otra Vista o no (en otra Vista establecida en NSUserDefaults necesitaba la información) y dependiendo de las condiciones, establezca el título necesario para su UIButton, entonces [yourButton setTitle: @ " Title " forState: UIControlStateNormal];

Asegúrate de estar en el hilo principal.

Si no, aún guardará el texto del botón. Estará allí cuando inspeccione el objeto en el depurador. Pero en realidad no actualizará la vista.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top