Cambiar el texto de UIButton

102

Entonces estoy tratando de actualizar el texto en un UIButton cuando hago clic en él. Estoy usando la siguiente línea para cambiar el texto:

calibrationButton.titleLabel.text = @"Calibration";

He verificado que el texto está cambiando, pero cuando ejecuto la aplicación y hago clic en el botón, cambia a "Calibración" durante una fracción de segundo y luego vuelve a su valor predeterminado. Alguna idea de por qué esto esta pasando? ¿Hay algún tipo de función de actualización a la que deba llamar?

Julián Coltea
fuente
1
posible duplicado del texto de la etiqueta de título del botón UIButton
dasblinkenlight

Respuestas:

248

Al diseñar sus subvistas, un UIButton establecerá el valor de texto de su titleLabel utilizando sus propios valores de título, de modo que pueda configurar hasta cuatro cadenas diferentes para los cuatro estados (normal, resaltado, seleccionado, deshabilitado).

Debido a esta característica, la configuración del texto de titleLabel directamente no persistirá y se restablecerá con el botón cuando presente sus subvistas.

Esto es lo que debe hacer para cambiar el texto del título del estado de un botón.

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];
Jesse Gumpo
fuente
4
entonces, ¿qué se supone que debe hacer button.titleLabel.text = @ "some text"?
Boris Gafurov
4
@BorisGafurov Si escribe button.titleLabel, verá que titleLabel es una propiedad de solo lectura, por lo que cualquiera de las propiedades de una propiedad de solo lectura también es de solo lectura. El uso de la notación de puntos para editarlos no funcionará, por lo que necesita métodos explícitos para editarlos. Esto tiene sentido al menos para mí.
erdekhayser
1
Creo que perdí unas dos horas hasta que me di cuenta de esto (¡que lamentablemente creo que ya sabía!)
race_carr
Gracias por tu respuesta.
dinesharjani
3
@erdekhayser En realidad, las propiedades de solo lectura PUEDEN tener propiedades de lectura / escritura. Utilizo la etiqueta de la etiqueta de título para pasar un número entero a un método de acción. Vea también el enlace de documentos de AppleAlthough this property is read-only, its own properties are read/write. Use these properties primarily to configure the text of the button. For example:
Aaron
6

programáticamente puede establecer el título del botón como se muestra a continuación:

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

también puede establecer la propiedad del título del botón desde el guión gráfico.

bhautikmewada191
fuente
2

No es un gran problema, y ​​posiblemente sea obvio, pero hay varios estados disponibles para los botones. Si proporciona el "incorrecto", no verá el cambio de texto como desea.

Noté que mi botón no mostraba el texto que agregué, usando los métodos que se muestran aquí. Consulte este enlace para asegurarse de que está proporcionando el UIControlState que desea.

¿Cuál es la diferencia entre UIControlStateHighlight y UIControlStateSelected?

usuario3429534
fuente
1

Para Swift 3.0

let button = UIButton(type: .system)
button.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
button.setTitle("set here", for: .normal)
button.addTarget(self, action: #selector(TableViewController.actionButtonTocuh), for: .touchUpInside)
button.titleLabel?.textColor  = #colorLiteral(red: 0.1019607857, green: 0.2784313858, blue: 0.400000006, alpha: 1)
view.addSubview(button)
Stephen Chen
fuente
1

Para Swift 2.0:

let btnObject : UIButton  = UIButton() 
btnObject.frame = CGRect(x: 8, y: 89, width: 70, height: 22)
btnObject.setTitle("Button Title", forState: UIControlState.Normal)
btnObject.titleLabel?.font = UIFont(name: "Helvetica Neue", size: 13)
btnObject.titleLabel?.textColor = UIColor.whiteColor()
btnObject.backgroundColor = UIColor(red: 189/255, green: 176/255, blue: 0/255, alpha: 1)
btnObject.titleLabel?.textAlignment = NSTextAlignment.Center
btnObject.addTarget(self, action: "btnbtnObjectClick:", forControlEvents: UIControlEvents.TouchUpInside)
subView.addSubview(btnObject)
Suraj Sonawane
fuente
1

Si no desea establecer el título para todos los estados, simplemente configúrelo para el estado normal, ya que el título para los estados no configurados será el título predeterminado del estado normal.

btn.setTitle("Some text", for:.normal)
Johan Franzén
fuente