iOS - передача имени отправителя (кнопки) в addSubview - PullRequest
3 голосов
/ 24 января 2012

У меня есть основной вид с 3 кнопками. Нажатие на любую из кнопок добавляет 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 подпредставления - по одному для каждой кнопки?

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

Ответы [ 3 ]

16 голосов
/ 24 января 2012

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

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

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

4 голосов
/ 24 января 2012

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

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

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

В моем mainView.h я объявил NSString и его свойство @

...

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 (хотя это совершенно другой объект, чем тот, который объявлен в main)

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

- (void)viewDidLoad {
[super viewDidLoad];

int theValueOfTheButtonPressed = [self.btnPressed intValue];
}

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

Не забудьте @synthesize btnPressed; а также [btnPressed release]; в mainView.m и secondView.m

...