iOS – передача имени отправителя (кнопки) в addSubview

У меня есть основной вид с тремя кнопками. Нажатие на любую из кнопок добавляет SubView.

Кнопки имеют разные названия и все связаны с IBAction "switchView"

Ниже приведен код «switchView».

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

«SecondView» загружается правильно, и все работает хорошо.

Проблема в том, что я хочу знать, какая кнопка была отправителем.

Я не хочу создавать 3 подзаголовка, по одному для каждой кнопки. Код и XIB будут абсолютно одинаковыми>

Единственная разница была бы переменной, которую я хотел бы настроить во втором представлении (метод viewDidLoad) в зависимости от того, кто является отправителем (нажата кнопка)

Это возможно? Или мне нужно создать 3 подвид – один для каждой кнопки?

Ваша помощь очень ценится!

Вы можете идентифицировать разные кнопки с тегом. например, с помощью вашего метода:

 -(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... } } 

Свойство тега можно установить через InterfaceBuilder. Надеюсь это поможет.

Я думаю, вы можете решить двумя способами:

  1. Создайте свойство типа: @property (nonatomic, strong) IBOutlet UIButton *button1, *button2, *button3; в вашем диспетчере просмотра и привяжите кнопки к ним в качестве ссылки на розетку на XIB.
  2. Дайте тег для каждой кнопки на вашем xib и попросите тег отправителя с отправителем UIButton *b=(UIButton*)sender; b.tag; UIButton *b=(UIButton*)sender; b.tag; как и Маркус.

Решение моей проблемы сводилось к передаче данных между mainView и subView.

В моем mainView.h я объявил NSString и ее @property

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

то в моем mainView.m внутри метода switchView я сделал это:

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

Эта строка в приведенном выше коде фактически заботится о передаче данных во вновь созданный subView:

 [myViewController setBtnPressed:self.btnPressed]; 

Затем в моем secondView.h я объявляю точно тот же NSString * btnPressed и его @property (хотя это совершенно другой объект, чем тот, который объявлен в основном)

Затем в моем secondView.m я получаю значение нажатой кнопки, которую меня интересует.

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

Это хорошо работает.

Не забывайте @synthesize btnPressed; а также [btnPressed release]; как в mainView.m, так и в secondView.m

Interesting Posts
Давайте будем гением компьютера.