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?

rocket101
fuente

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.

Gal Marom
fuente
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.

Bendrix
fuente
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)
    }
Dmitry
fuente
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)
Bhavin Ramani
fuente
9

Swift 5.0

// Standard State
myButton.setTitle("Title", for: .normal)
Tyler Rutt
fuente
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 ...

Christian Navelot
fuente
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

gustavoanalíticos
fuente
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)
}
Midhun p
fuente
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)
Giang
fuente
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)
Jasani Hardik
fuente