Как определить, какая кнопка была нажата из трех кнопок

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

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

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

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

4 Solutions collect form web for “Как определить, какая кнопка была нажата из трех кнопок”

Вы можете наложить кнопку Taped с помощью значения Tag, предположим, что у вас есть кнопка «Дерево» для примера: –

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

Затем установите Tag of Button как: –

 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 вы получаете объект Button как: –

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

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

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

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

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

Вы также можете использовать кнопки 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 } 

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

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

  • Невозможно настроить свойство контроллера назначения readyForSegue
  • 'Show' segue в Xcode 6 представляет viewcontroller как модальный в iOS 7
  • Не удается найти сегменты без идентификаторов
  • Как сделать универсальную раскадровку в Xcode
  • Использование адаптивного popover segue и перенос адресата в контроллер навигации приводит к утечкам памяти
  • Попытка загрузить представление контроллера просмотра во время его освобождения. CoreSpotlight
  • Как инициализировать представление popover из UICollectionViewCell в IOS
  • Как сделать всплывающее / диалоговое представление в iOS в отдельном ViewController?
  • Как добавить ссылку на раскадровку в другой раскадровки
  • Невозможно встроить в контроллер навигации, если я передаю данные с помощью prepareForSegue
  • segue: странность диспетчера задач назначения
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.