Alterar texto do UIButton programaticamente rápido

222

Pergunta simples aqui. Eu tenho um UIButton, currencySelector e quero alterar programaticamente o texto. Aqui está o que eu tenho:

currencySelector.text = "foobar"

O Xcode me dá o erro "Declaração esperada". O que estou fazendo de errado e como posso alterar o texto do botão?

rocket101
fonte

Respostas:

595

Em Swift 3, 4, 5:

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

De outra forma:

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

Também @IBOutleté necessário declarar para o arquivo button.

Gal Marom
fonte
32
Você pode omitir UIControlState. por exemplo,forState: .Normal
funroll
11
Swift3 agora é .normalobservar o caso mais baixo
Matthew
6
Swift3 alterar forStateparafor
Mathew P. Jones
1
Swift3: self.btnBuy.setTitle ("Buy", para: UIControlState.normal)
Qui
5
para SWIFT 4 também button.setTitle("Button Title",for: .normal)trabalha !, graças
Rakshitha Muranga Rodrigo
74

Apenas um esclarecimento para os novos no Swift e iOS . Abaixo da linha de código:

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

aplica-se apenas a IBOutlets, não IBActions.

Portanto, se seu aplicativo estiver usando um botão como uma função para executar algum código, por exemplo, tocando música e você desejar alterar o título de Playpara com Pausebase em uma variável de alternância, você também precisará criar um IBOutletpara esse botão.

Se você tentar usar button.setTitleum contra IBAction, receberá um erro. É óbvio quando você o conhece, mas para os noobs (todos nós éramos), essa é uma dica útil.

Bendrix
fonte
1
Sim, eu estava no Google exatamente isso até encontrar sua resposta. Obrigado! +1
Evernoob 18/06/2015
1
É um padrão no IOS que demorei um pouco para descobrir. Existem atributos de itens da interface do usuário aos quais você não tem acesso, a menos que um IBOutlet seja criado. Se você estiver tentando alterar um atributo de uma interface do usuário e não puder acessá-lo, verifique se possui o IBAction que está executando algum código e o IBOutlet que fornece acesso aos atributos.
precisa
8
Esta resposta não faz sentido. A senderação será o botão. Você pode aplicar o que quiser ao sender. Você não precisa de uma tomada para fazer isso.
rmaddy
2
Nem a resposta de Bendix nem seu comentário estão corretos. Eles estão completamente errados.
Vikingosegundo
A questão não menciona o construtor de interface tão errado ao assumir que é esse o caso.
26417 Edward 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
fonte
1
Eu tive que usar UIControl.State. Dizia que UIControlState estava obsoleto
HokiEJP 29/08/19
9

Swift 3:

Definir o título do botão:

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

// For highlighted state:
my_btn.setTitle("Button Title2", for: .highlighted)
Bhavin Ramani
fonte
9

Swift 5.0

// Standard State
myButton.setTitle("Title", for: .normal)
Tyler Rutt
fonte
6

Alterar o título quando atribuído é um pouco diferente:

Acabei de encontrar um problema: Se você possui um UIButton com um Título atribuído, deve usar:

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

conforme Apple SetTitle Doc :

Se você definir um título e um título atribuído para o botão, o botão prefere o uso do título atribuído sobre este.

Eu tinha um título atribuído e tentei definir o título, sem nenhum efeito ...

Christian Navelot
fonte
3

Swift 3

Quando você cria a @IBAction:

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

Isso define o remetente como UIButton (em vez de Qualquer), para atingir o btnAction como UIButton

gustavoanalytics
fonte
2

rápido 4.2 e acima

usando o IBOutlet do botão

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

usando IBAction do botão

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("New Title", for: .normal)
}
midhun p
fonte
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
fonte
0

Para definir um título para um botão no Xcode usando o swift - 04: primeiro crie um método chamado setTitle com o título do parâmetro e o estado UIController como abaixo;

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

}

e lembre-se deste método no seu método de ação de botão como;

yourButtonName.setTitle("String", for: .state)
Jasani Hardik
fonte