iOS: pasa el nombre del remitente (button) para agregarSubview

Tengo una vista principal con 3 botones. Al hacer clic en cualquiera de los botones, se agrega un SubView.

Los botones tienen títulos diferentes y están todos vinculados a IBAction "switchView"

El código "switchView" está debajo.

- (IBAction)switchView:(id)sender{ secondView *myViewController = [[secondView alloc] initWithNibName:@"secondView" bundle:nil]; [self.view addSubview:myViewController.view]; } 

El "secondView" se carga correctamente y todo funciona bien.

El problema es que quiero saber qué button era el remitente.

No quiero crear 3 subvistas, una para cada button. El código y XIB serían absolutamente iguales>

La única diferencia sería una variable que quisiera configurar en la segunda vista (método viewDidLoad) dependiendo de quién es el remitente (qué button fue presionado)

es posible? ¿O tendría que crear 3 subViews, una para cada button?

¡Tu ayuda es muy apreciada!

Puede identificar diferentes botones con la propiedad de label. por ejemplo, con su método:

 -(IBAction)switchView:(id)sender { UIButton *button = (UIButton*)sender; if (button.tag == 1) { //TODO: Code here... } else if (button.tag == 2) { //TODO: Code here... } else { //TODO: Code here... } } 

La propiedad de la label se puede establecer a través de InterfaceBuilder. Espero que esto ayude.

Creo que puedes resolver de 2 maneras:

  1. Cree una propiedad como: @property (nonatomic, strong) IBOutlet UIButton *button1, *button2, *button3; en su viewcontroller y vincular los botones con ellos como salida de reference en el XIB.
  2. Da una label diferente a cada button en tu xib y solicita la label del remitente con el emisor de UIButton *b=(UIButton*)sender; b.tag; UIButton *b=(UIButton*)sender; b.tag; como Markus publicado en detalle.

Al resolver mi problema, todo se networkingujo a la transferencia de datos entre el mainView y el subView.

En mi mainView.h, declaré un NSString y su @property

 NSString *btnPressed; } @property(nonatomic, retain) NSString *btnPressed; 

entonces en mi mainView.m dentro del método switchView hice esto:

 - (IBAction)switchView:(id)sender{ secondView *myViewController = [[secondView alloc] initWithNibName:@"secondView" bundle:nil]; btnPressed = [NSString stringWithFormat:@"%i", [sender tag]]; [myViewController setBtnPressed:self.btnPressed]; [self.view addSubview:myViewController.view]; } 

Esta línea en el código anterior realmente se encarga de transferir los datos a la subView recién creada:

 [myViewController setBtnPressed:self.btnPressed]; 

Luego en mi secondView.h declaro exactamente el mismo NSString * btnPressed y su @property (aunque este es un object completamente diferente al que se declaró en main)

Luego, en mi secondView.m, obtengo el valor del button presionado en el que estoy interesado.

 - (void)viewDidLoad { [super viewDidLoad]; int theValueOfTheButtonPressed = [self.btnPressed intValue]; } 

Esto funciona bien.

No te olvides de @synthesize btnPressed; así como también [btnPress release]; en both mainView.m y secondView.m