Alterar o texto UIButton

102

Estou tentando atualizar o texto em um UIButton quando clico nele. Estou usando a seguinte linha para alterar o texto:

calibrationButton.titleLabel.text = @"Calibration";

Eu verifiquei que o texto está mudando, mas quando eu executo o aplicativo e clico no botão, ele muda para "Calibration" por uma fração de segundo e depois volta para o seu valor padrão. Alguma ideia de por que isso pode estar acontecendo? Há algum tipo de função de atualização que preciso chamar?

Julian Coltea
fonte
1
possível duplicata do texto UIButton TitleLabel
dasblinkenlight

Respostas:

248

Ao dispor suas subvisualizações, um UIButton definirá o valor de texto do titleLabel usando seus próprios valores de título, de forma que você possa definir até quatro strings diferentes para os quatro estados (normal, destacado, selecionado, desabilitado).

Por causa desse recurso, definir o texto do titleLabel diretamente não persistirá e será redefinido pelo botão quando ele exibir suas subvisualizações.

Isso é o que você deve fazer para alterar o texto do título para o estado de um botão.

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];
Jesse Gumpo
fonte
4
então o que button.titleLabel.text = @ "algum texto" deve fazer então?
Boris Gafurov
4
@BorisGafurov Se você digitar button.titleLabel, verá que titleLabel é uma propriedade somente leitura e, portanto, todas as propriedades de uma propriedade somente leitura são somente leitura. Usar a notação de ponto para editá-los não funcionará e, portanto, você precisa de métodos explícitos para editá-los. Isso faz sentido pelo menos para mim.
erdekhayser
1
Acho que perdi cerca de duas horas até perceber isso (o que, infelizmente, acho que já sabia!)
race_carr
Obrigado pela sua resposta.
dinesharjani
3
@erdekhayser Na verdade, as propriedades somente leitura PODEM ter propriedades de leitura / gravação. Eu uso a tag do titlelabel para passar um número inteiro para um método de ação. Veja também o link de documentos da 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

programaticamente, você pode definir o título do botão como abaixo:

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

você também pode definir a propriedade do título do botão no storyboard.

bhautikmewada191
fonte
2

Não é um grande negócio e, possivelmente, óbvio, mas existem vários estados disponíveis para botões. Se você fornecer o 'errado', não verá a alteração do texto conforme desejado.

Percebi que meu botão não estava mostrando o texto que adicionei, usando os métodos mostrados aqui. Verifique este link para certificar-se de que está fornecendo o UIControlState pretendido.

Qual é a diferença entre UIControlStateHighlighted e UIControlStateSelected?

user3429534
fonte
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
fonte
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
fonte
1

Se você não quiser definir o título para todos os estados, apenas defina-o para o estado normal, pois o título dos estados não definidos será o padrão para o título do estado normal.

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