cambiar el texto del botón y deshabilitar el botón en iOS

106

¿Cómo se cambia el texto del botón y se desactiva un botón en iOS?

Namratha
fuente

Respuestas:

208

Hola Namratha, si estás preguntando acerca de cambiar el texto y el estado habilitado / deshabilitado de un UIButton, puedes hacerlo con bastante facilidad de la siguiente manera;

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

Si ha creado los botones en Interface Builder y desea acceder a ellos en código, puede aprovechar el hecho de que se pasan como argumento a las IBActionllamadas:

- (IBAction) triggerActionWithSender: (id) sender;

Esto se puede vincular al botón y obtendrá el botón en el senderargumento cuando se active la acción. Si eso no es suficiente (porque necesita acceder a los botones en otro lugar que no sea en las acciones), declare una salida para el botón:

@property(retain) IBOutlet UIButton *someButton;

Entonces es posible vincular el botón en IB al controlador, el código de carga NIB establecerá el valor de la propiedad al cargar la interfaz.

MGunetileke
fuente
¡Gracias! Tengo UIButtons en mi aplicación pero no los he mencionado en el código en ninguna parte. He utilizado el generador de interfaces para registrar el mecanismo de acción de destino (para ese fin, tengo algunos métodos de IBAction para manejar los clics de los botones), entonces, ¿cómo accedo a los botones?
Namratha
1
Solo quiero agregar eso si desea que la propiedad @ se declare por usted. En XCode 4, mantenga presionada la tecla CTRL, haga clic en el botón y luego arrastre el mouse al archivo .h correspondiente de la vista. Aparecerá un diálogo que le solicitará el nombre de la propiedad. ¡Entonces listo, tendrás la propiedad para que la uses en tu código!
milesmeow
21
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];

Úselo UIControlStateNormalpara establecer su título.

Hay un par de estados que proporcionan los botones de interfaz de usuario, puede echar un vistazo:

[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];
muy cafeinado
fuente
Iba a hacer +1 en esta publicación, pero decidí no hacerlo. [self.eraseButton setTitle: @ "Erase" forState: UIControlStateDisabled]; Esto no atenúa el botón. No hace nada, si ya tiene setEnable: como no.
coolcool1994
18

Si alguien, que está buscando una solución en Swift, aterrizara aquí, sería:

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

Documentación: isEnabled , setTitle .

Código anterior:

myButton.enabled = false // disables
myButton.setTitle("myTitle", forState: UIControlState.Normal) // sets text
mikiqex
fuente
'setTitle ( : forState :)' ha sido renombrado a 'setTitle ( : for :)'
Lavi Avigdor
10

Suponiendo que el botón es un UIButton:

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

Consulte la documentación de UIButton.

zoul
fuente
3

Para cambiar el título del botón:

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

Para discapacitados:

[mybtn setEnabled:NO];
Bhavin Ramani
fuente
3

En Swift 3, simplemente puede cambiar el título de un botón de la siguiente manera:

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

y deshabilita el botón por:

button.isEnabled = false

.normales lo mismo que UIControlState.normalporque se infiere el tipo.

lmiguelvargasf
fuente
¿Qué deberíamos usar si es un botón de acción?
Karthikeyan Sk
0

Si desea cambiar el título como respuesta a un toque, puede intentarlo dentro del método IBAction del botón en su delegado de controlador de vista. Esto activa y desactiva un chat de voz. ¡La configuración del chat de voz no se trata aquí!

- (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 es específico para el chat de voz, por supuesto, pero puede usar su propiedad booleana local para controlar el interruptor.

Tim
fuente
0

SWIFT 4 con extensión

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)
    }
}

y use:

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