objective c - color - IOS: un IBAction para botones mĂșltiples
titlelabel swift (7)
Configure todos los botones para usar esa única acción. Las acciones generalmente tienen un parámetro de sender
, que puede usar para determinar qué botón está llamando a la acción. Una forma popular de diferenciar entre botones es asignar un valor diferente a la propiedad de tag
cada botón. Por lo tanto, puede tener 40 botones con etiquetas que van del 1 al 40. (0 probablemente no sea una gran opción para una etiqueta, ya que ese es el valor predeterminado, y cualquier botón para el que se olvide de establecer la etiqueta tendrá 0 como valor de la etiqueta)
Esta técnica es más útil cuando todos los botones hacen aproximadamente lo mismo, como los botones de una calculadora o teclado. Si cada uno de los botones hace algo completamente diferente, entonces terminas con el equivalente de 40 métodos, pero sustituyes tu propia declaración de cambio por el sistema de mensajes de Objective-C. En ese caso, a menudo es mejor simplemente dedicar el tiempo para crear tantas acciones como necesite y asignarlas adecuadamente.
En mi proyecto, debo controlar la acción de 40 botones, pero no quiero crear 40 IBAction, ¿puedo usar solo un IBAction, cómo?
Parece que está obteniendo todas las respuestas que necesita, pero quería agregar a las respuestas de todos los demás.
Si desea utilizar un IBAction o 40 acciones, depende de lo que quiera que hagan los botones. Si todos los botones hacen cosas completamente diferentes, necesita todas las IBActions por separado, pero si desea que todas ellas hagan lo mismo, puede usar solo una. Necesito más detalles de esos botones y acciones, pero es probable que tenga un título para cada botón, por lo que puede usarlo para diferenciar cada botón y crear un mensaje o algo que se personalice con el botón presionado. Aquí está el ejemplo. Cada vez que se presiona un botón, una etiqueta muestra un mensaje que dice "ícono del botón" presionado.
Al hacerlo de esta manera, no es necesario cambiar la carcasa con los 40 patrones. Todavía puede mostrar o hacer algo individualizado con el botón presionado con solo 2 o 3 líneas de código.
- (IBAction)button_Clicked:(UIButton *)sender {
//Get the buttons'' titles.
NSString *title =[sender titleForState:UIControlStateNormal];
//Construct a message that includes the *title.
NSString *plainText=[NSString stringWithFormat:@"%@ button pressed.", title];
//Assigns the *plainText to the label.
self.Label.text=plainText;
}
@end
Por supuesto. Simplemente conecte todos los botones al mismo método de acción en Interface Builder. Use el argumento del sender
del método (posiblemente junto con la propiedad de la tag
los botones) para identificar qué botón está enviando el evento.
Si está utilizando el constructor de interfaz para crear los botones, simplemente apúntelos al mismo IBAction en la clase correspondiente.
A continuación, puede diferenciar entre los botones dentro del método IBAction leyendo el texto del botón ...
- (IBAction)buttonClicked:(id)sender {
NSLog(@"Button pressed: %@", [sender currentTitle]);
}
... o estableciendo la propiedad de tag
en Xcode y leyéndola a través de [sender tag]
. (Si usa este enfoque, inicie las etiquetas en 1, ya que 0 es el valor predeterminado y, por lo tanto, de poco uso).
Solo use un IBAction y asígnelo a todos sus botones.
Solo utilicé el método anterior, tenía una selección de botones pero los convertí a todos y usé la caja del interruptor en su lugar
-(IBAction)buttons:(id)sender
{
switch ([sender tag])
{
case 0 :
}
}
-(IBAction)myButtonAction:(id)sender {
if ([sender tag] == 0) {
// do something here
}
if ([sender tag] == 1) {
// Do something here
}
}
// in Other words
-(IBAction)myButtonAction:(id)sender {
switch ([sender tag]) {
case 0:
// Do something here
break;
case 1:
// Do something here
break;
default:
NSLog(@"Default Message here");
break;
}