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?

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.


¡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];

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

'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.


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];

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.


¿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.


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")
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.