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?


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];

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.



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)

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)

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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.