Cambio de texto de UIButton programáticamente rápido


222

Pregunta simple aquí. Tengo un UIButton, currencySelector, y quiero cambiar el texto mediante programación. Esto es lo que tengo:

currencySelector.text = "foobar"

Xcode me da el error "Declaración esperada". ¿Qué estoy haciendo mal y cómo puedo cambiar el texto del botón?

Respuestas:


595

En Swift 3, 4, 5:

button.setTitle("Button Title", for: .normal)

De otra manera:

button.setTitle("Button Title", forState: UIControlState.Normal)

También un @IBOutlettiene que declarar para el button.


32
Se puede omitir UIControlState. Por ejemploforState: .Normal
funroll

11
Swift3 ahora tiene en .normalcuenta las minúsculas
Matthew

66
Cambio Swift3 forStateafor
Mathew P. Jones

1
Swift3: self.btnBuy.setTitle ("Comprar", para: UIControlState.normal)
Thiru

55
¡por swift 4 también button.setTitle("Button Title",for: .normal)funciona !, gracias
Rakshitha Muranga Rodrigo

74

Solo una aclaración para aquellos nuevos en la programación Swift e iOS . Debajo de la línea de código:

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

solo se aplica a IBOutlets, no IBActions.

Entonces, si su aplicación está usando un botón como una función para ejecutar algún código, digamos que está reproduciendo música, y desea cambiar el título Playa Pausebasado en una variable de alternancia, también debe crear un IBOutletbotón para ese botón.

Si intenta usar button.setTitlecontra un IBAction, obtendrá un error. Es obvio una vez que lo sabes, pero para los novatos (todos lo éramos) este es un consejo útil.


1
Sí, estaba a punto de googlear exactamente esto hasta que vi tu respuesta. ¡Gracias! +1
Evernoob

1
Es un patrón en iOS que me llevó un tiempo descubrir. Hay atributos de elementos de la IU a los que no tiene acceso a menos que se cree un IBOutlet. Si alguna vez intenta cambiar un atributo de una IU y no puede acceder a él, asegúrese de tener tanto la IBAction que ejecuta algún código como el IBOutlet que proporciona acceso a los atributos.
Bendrix

8
Esta respuesta no tiene sentido. El senderde la acción será el botón. Puede aplicar lo que desee al sender. No necesita una salida para hacer esto.
rmaddy

2
Ni la respuesta de Bendix ni su comentario son correctos. Están completamente equivocados.
vikingosegundo

La pregunta no menciona el constructor de interfaces tan incorrecto como para suponer que ese es el caso.
Edward

13

Swift 5:

    let controlStates: Array<UIControl.State> = [.normal, .highlighted, .disabled, .selected, .focused, .application, .reserved]
    for controlState in controlStates {
        button.setTitle(NSLocalizedString("Title", comment: ""), for: controlState)
    }

1
Tuve que usar UIControl.State. Decía que UIControlState estaba en desuso
HokiEJP

9

Swift 3:

Establecer el título del botón:

//for normal state:
my_btn.setTitle("Button Title", for: .normal)

// For highlighted state:
my_btn.setTitle("Button Title2", for: .highlighted)

9

Swift 5.0

// Standard State
myButton.setTitle("Title", for: .normal)

6

Cambiar el título cuando se le atribuye es un poco diferente:

Acabo de encontrar un problema: si tiene un UIButton con un título atribuido, debe usar:

my_btn.setAttributedTitle(NSAttributedString(string: my_title), for: my_state)

como, por Apple SetTitle Doc :

Si establece un título y un título atribuido para el botón, el botón prefiere el uso del título atribuido sobre este.

Tenía un título atribuido y traté de ponerle título, sin ningún efecto ...


3

Swift 3

Cuando haces la @IBAction:

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("string goes here", for: .normal)
}

Esto establece el remitente como UIButton (en lugar de Any) para que apunte a btnAction como UIButton


2

Swift 4.2 y superior

usando el IBOutlet del botón

btnOutlet.setTitle("New Title", for: .normal)

usando el botón IBAction

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("New Title", for: .normal)
}

0

Swift 3

let button: UIButton = UIButton()
button.frame = CGRect.init(x: view.frame.width/2, y: view.frame.height/2, width: 100, height: 100)
button.setTitle(Title Button, for: .normal)

0

Para establecer un título para un botón en Xcode usando swift - 04: primero cree un método llamado setTitle con el título del parámetro y el estado UIController como se muestra a continuación;

func setTitle(_ title : String?, for state : UIControl.State)   {

}

y recuerde este método en su método de acción de botón como;

yourButtonName.setTitle("String", for: .state)
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.