2013-10-09 4 views
4

У меня есть три кнопки, все они выполняют одно и то же действие в режиме segue. Все связаны с одним и тем же соединением.Как определить, какая кнопка была нажата из трех кнопок.

- (IBAction)difficultyButtonPressed:(id)sender { 
    // Any difficulty selected 
    [self performSegueWithIdentifier:@"mainGameTurnGuess" sender:self]; 
} 

Что мне нужно сделать, это определить, какая кнопка была нажата в методе prepareForSegue. Как я могу определить, какая из трех кнопок нажата.

Не смотря на формулировку/текст на кнопке, так как это изменится для локализации.

+0

Добавить другое значение «тег» для каждого. – Wain

+0

У меня есть, но как я могу ссылаться на них в prepareForSegue – StuartM

+0

Держите ссылки на свои кнопки при их создании. – LuisCien

ответ

8

Вы можете ditermine на ТЕСЬМОЙ кнопку с помощью тега Значение предположим, у вас есть кнопка дерева для примера: -

@property (nonatomic, strong) UIButton *btn1; 
@property (nonatomic, strong) UIButton *btn2; 
@property (nonatomic, strong) UIButton *btn3; 

Затем установите метку кнопки, как: -

btn1.tag=1; 
btn2.tag=2; 
btn3.tag=3; 

и установить же IBAction для каждого Кнопка и: -

[btn1 addTarget:self action:@selector(difficultyButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

[btn2 addTarget:self action:@selector(difficultyButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

[btn3 addTarget:self action:@selector(difficultyButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

- (IBAction)difficultyButtonPressed:(UIButton*)sender 
{ 
NSLog(@"Button tag is %d",sender.tag); 

    // you can use if else condition using sender.tag like 

     if(sender.tag==1)//first button related identifire 
     { 
      [self performSegueWithIdentifier:@"mainGameTurnGuess_FirstButtonIdentirier" sender:sender]; 
     } 
     else if(sender.tag==2)//second button related identifier 
     { 
      [self performSegueWithIdentifier:@"mainGameTurnGuess_secondButtonIdentirier" sender:sender]; 
     } 
     else //Third button related identifier 
     { 
      [self performSegueWithIdentifier:@"mainGameTurnGuess_ThirdButtonIdentirier" sender:sender]; 
     } 

} 

Для получения информации

Если вы используете id в IBAction тогда вы получите кнопки объект, как: -

- (IBAction)difficultyButtonPressed:(id)sender { 
    UIButton *button = (UIButton *)sender; 
    NSLog(@"Button tag is %d",button.tag); 
} 
+0

Ваш первый ответ был достаточно. Спасибо за это, мне нужно было указать на UIButton для отправителя, чтобы он работал. Раньше я просто получал (id) отправителя, поэтому не мог получить доступ к тегу – StuartM

+0

Вам не нужно использовать теги с этой настройкой. Вместо сравнения sender.tag == 1, вы могли бы просто сравнить sender == btn1 и т. Д. – neilco

+0

@neilco существует несколько альтернативных способов выполнения одной и той же вещи и да stuarth, если вы используете (id), тогда вы можете получить выбранный объект кнопки например ** 'UIButton * button = (UIButton *) отправитель' ** –

0

магазин теге кнопки в переменной экземпляра, и смотреть на эту переменную, когда prepareForSegue называется

0

Вы можете переслать по параметру sender, отправленному на difficultyButtonPressed:, так как это кнопка, которая была нажата. То есть, если вы сделаете это:

- (IBAction)difficultyButtonPressed:(id)sender { 
    // Any difficulty selected 
    [self performSegueWithIdentifier:@"mainGameTurnGuess" sender:sender]; 
} 

параметр sender отправляется prepareForSegue:sender: будет кнопка, которая была нажата.

+0

id - это не объект Button, если вы используете (id) вместо (UIButton *) в Button IBAction, тогда вы должны создать объект кнопки, например ** UIButton * button = (UIButton *) отправитель; ** –

+0

@NitinGohel Неверный. Попробуйте: добавьте 'NSLog (@"% @ ", отправитель)' обработчику событий, и вы увидите что-то вроде этого: '> '. Вам нужно всего лишь отправить 'sender' в' UIButton', если вам нужно получить доступ к свойствам и методам, характерным для UIButton. – neilco

0

Вы также можете использовать кнопки Restoration Id. В prepareForSegue вы можете сделать следующее:

UIButton *btnSender; 
if ([sender isMemberOfClass:[UIButton class]]) 
{ 
    btnSender = (UIButton *)sender; 
} 

// Then you can reference the Restoration Id or a tag of the clicked button to do further conditional logic if you want. 
if([btnSender.restorationIdentifier isEqualToString:@"myBtn1"]) 
{ 
    //do something 
} 

цитирую документацию яблока:

Поскольку перетекает может быть вызвана из нескольких источников, вы можете использовать информацию, содержащуюся в SEGUE отправителя и параметров неоднозначность между различными логическими путями в вашем приложении. Например, если segue возник из представления таблицы, параметр отправителя будет идентифицировать ячейку представления таблицы, которую пользователь прослушивает. Вы можете использовать эту информацию для установки данных на контроллере вида назначения.

Смежные вопросы