Tengo un UIButton
, que cuando se presiona, abre una nueva vista donde el usuario puede cambiar algunas configuraciones. Cuando se descarta la vista, me gustaría actualizar el título / texto 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 nunca parece cambiar del texto / título original como se especifica en IB.
ios
iphone
uibutton
uicontrolstate
George Armhold
fuente
fuente
Respuestas:
¿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 es generalmente el problema que tengo cuando veo estos síntomas.
Editar: si bien no es el caso aquí, algo como esto también puede suceder si establece un título atribuido al botón, luego intenta cambiar el título y no el título atribuido.
fuente
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.
fuente
A partir de Swift 4:
fuente
Descubrí otro problema. Puede ser un error introducido en iOS 5, pero pensé en señalarlo a cualquiera que lo encuentre.
Si no establece ningún texto predeterminado para el botón en el XIB, no aparecerá ningún texto si lo establece mediante programación. Y si establece 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 muestra 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.
fuente
Aunque el problema de Caffeine Coma se resolvió, me gustaría ofrecer otra posible causa por la que el título no aparece en un UIButton.
Si configura una imagen para el UIButton usando
Puede cubrir el título. Descubrí esto por las malas e imagino que algunos de ustedes terminan leyendo esta página por la misma razón.
Utilice este método en su lugar
para la imagen del botón y el título no se verán afectados.
Probé esto con botones creados mediante programación y botones creados en un .xib
fuente
para rápido:
fuente
¡Resulta que los médicos te dan la respuesta! El UIButton ignorará el cambio de título si ya tiene una Cadena de atributos para usar (parece ser la predeterminada que se obtiene cuando se usa el constructor de interfaces Xcode).
Usé lo siguiente:
fuente
Otra posible causa es esta:
Si intenta establecer el título del botón en el
(id)initWithNibName: ...
método, la propiedad del botón seguirá siendo nula. Aún no se ha asignado al UIButton.Debe asegurarse de que está configurando sus botones en un método como
(void)viewWillLoad
o(void)viewWillAppear
, pero probablemente no desee configurarlos tan tarde como(void)viewDidAppear
.fuente
A veces puede complicarse mucho. ¡La forma más fácil es " actualizar " la vista del botón!
fuente
Seguí teniendo problemas con esto, la única solución era agregar una imagen y etiquetar como subvistas al uibutton. Luego descubrí que el problema principal era que estaba usando un UIButton con título: Atribuido. Cuando lo cambié a Plain, ¡simplemente estableciendo el titleLabel.text funcionó!
fuente
@funroll tiene toda la razón. Aquí puede ver lo que necesita Asegúrese de que la función se ejecute solo en el hilo principal . Si no desea tratar con subprocesos, puede hacerlo así, 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 se necesitaba información) y dependiendo de las condiciones, establezca el título necesario para su UIButton, entonces [yourButton setTitle: @ "Title" forState: UIControlStateNormal];
fuente
Asegúrate de estar en el hilo principal.
De lo contrario, se guardará el texto del botón. Estará allí cuando inspeccione el objeto en el depurador. Pero en realidad no actualizará la vista.
fuente