alterar o texto do botão e desativar o botão no iOS

106

Como você altera o texto do botão e desativa um botão no iOS?

Namratha
fonte

Respostas:

208

Ei, Namratha, Se você está perguntando sobre como mudar o texto e o estado habilitado / desabilitado de um UIButton, isso pode ser feito facilmente da seguinte maneira;

[myButton setTitle:@"Normal State Title" forState:UIControlStateNormal]; // To set the title
[myButton setEnabled:NO]; // To toggle enabled / disabled

Se você criou os botões no Interface Builder e deseja acessá-los em código, pode aproveitar o fato de que eles são passados ​​como um argumento para as IBActionchamadas:

- (IBAction) triggerActionWithSender: (id) sender;

Isso pode ser vinculado ao botão e você obterá o botão no senderargumento quando a ação for disparada. Se isso não for suficiente (porque você precisa acessar os botões em outro lugar que não nas ações), declare uma saída para o botão:

@property(retain) IBOutlet UIButton *someButton;

Então é possível vincular o botão do IB ao controlador, o código de carregamento do NIB definirá o valor da propriedade ao carregar a interface.

MGunetileke
fonte
Obrigado! Tenho UIButtons em meu aplicativo, mas não os mencionei no código em nenhum lugar. Eu usei o construtor de interface para registrar o mecanismo de ação de destino (para esse fim, eu tenho alguns métodos IBAction para lidar com cliques de botão), então como faço para acessar os botões?
Namratha
1
Também quero adicionar isso se quiser que a propriedade @ seja declarada para você. No XCode 4, mantenha pressionada a tecla CTRL, clique no botão e arraste o mouse para o arquivo .h correspondente da visualização. Uma caixa de diálogo aparecerá solicitando o nome da propriedade. Então voila você terá a propriedade para usar em seu código!
milesmeow
21
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];

Use UIControlStateNormalpara definir o seu título.

Existem alguns estados que os botões da IU fornecem, você pode dar uma olhada:

[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];
altamente cafeinado
fonte
Eu ia marcar este post com +1, mas decidi não fazê-lo. [self.eraseButton setTitle: @ "Erase" forState: UIControlStateDisabled]; Isso não escurece o botão. Ele não faz nada, se você já tiver setEnable: como no.
coolcool1994
18

Se alguém, que está procurando uma solução em Swift, desembarcasse aqui, seria:

myButton.isEnabled = false // disables
myButton.setTitle("myTitle", for: .normal) // sets text

Documentação: isEnabled , setTitle .

Código mais antigo:

myButton.enabled = false // disables
myButton.setTitle("myTitle", forState: UIControlState.Normal) // sets text
mikiqex
fonte
'setTitle ( : forState :)' foi renomeado para 'setTitle ( : for :)'
Lavi Avigdor
10

Supondo que o botão seja um UIButton:

UIButton *button = …;
[button setEnabled:NO]; // disables
[button setTitle:@"Foo" forState:UIControlStateNormal]; // sets text

Consulte a documentação para UIButton.

zoul
fonte
3

Para alterar o título do botão:

[mybtn setTitle:@"My Button" forState:UIControlStateNormal];
[mybtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];

Para desativar:

[mybtn setEnabled:NO];
Bhavin Ramani
fonte
3

No Swift 3, você pode simplesmente alterar o título de um botão:

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

e você desativa o botão:

button.isEnabled = false

.normalé o mesmo UIControlState.normalporque o tipo é inferido.

lmiguelvargasf
fonte
O que devemos usar se for um botão de ação?
Karthikeyan Sk
0

Se você deseja alterar o título como uma resposta ao toque, pode tentar isso dentro do método IBAction do botão em seu delegado do controlador de visualização. Isso ativa e desativa o bate-papo por voz. A configuração do chat de voz não é abordada aqui!

- (IBAction)startChat:(id)sender {
UIButton *chatButton = (UIButton*)sender;
if (!voiceChat.active) {
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Voice Chat"
                                                                   message:@"Voice Chat will become live. Please be careful with feedback if your friend is nearby."
                                                            preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                          handler:^(UIAlertAction * action) {}];
    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
    [voiceChat start];
    voiceChat.active = YES;
    [chatButton setTitle:@"Stop Chat" forState:UIControlStateNormal];
}
else {
    [voiceChat stop];
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Voice Chat"
                                                                   message:@"Voice Chat is closed"
                                                            preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                          handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
    voiceChat.active = NO;
    [chatButton setTitle:@"Chat" forState:UIControlStateNormal];
}

}

voiceChat é específico para chat de voz, é claro, mas você pode usar sua própria propriedade booleana local para controlar o switch.

Tim
fonte
0

SWIFT 4 com extensão

conjunto:

// set button label for all states
extension UIButton {
    public func setAllStatesTitle(_ newTitle: String){
        self.setTitle(newTitle, for: .normal)
        self.setTitle(newTitle, for: .selected)
        self.setTitle(newTitle, for: .disabled)
    }
}

E use:

yourBtn.setAllStatesTitle("btn title")
Oz Shabat
fonte