Solución:
Si está utilizando el generador de interfaces para crear los botones, simplemente apúntelos a la misma IBAction en la clase correspondiente.
A continuación, puede diferenciar entre los botones dentro del método IBAction, ya sea leyendo el texto del botón …
- (IBAction)buttonClicked:(id)sender {
NSLog(@"Button pressed: %@", [sender currentTitle]);
}
… o configurando el tag
propiedad en Xcode y volver a leerlo a través de [sender tag]
. (Si usa este enfoque, comience las etiquetas en 1, ya que 0 es el valor predeterminado y, por lo tanto, de poca utilidad).
-(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;
}
Configure todos los botones para usar esa única acción. Las acciones generalmente tienen un sender
parámetro, que puede utilizar para averiguar qué botón está llamando a la acción. Una forma popular de distinguir entre botones es asignar un valor diferente a cada botón. tag
propiedad. Por lo tanto, es posible que tenga 40 botones con etiquetas que van de 1 a 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 configurar la etiqueta tendrá 0 como valor de etiqueta.)
Esta técnica es más útil cuando todos los botones hacen aproximadamente lo mismo, como los botones de una calculadora o un teclado. Si cada uno de los botones hace algo completamente diferente, entonces terminará con el equivalente a 40 métodos, pero sustituirá su propia declaración de cambio por el sistema de mensajería de Objective-C. En ese caso, a menudo es mejor dedicar el tiempo a crear tantas acciones como necesite y asignarlas de forma adecuada.