Как определить, какая кнопка нажата, если они имеют одинаковый IBAction? - PullRequest
11 голосов
/ 04 апреля 2011

У меня есть две кнопки UIB (я создаю их с помощью IB), которые связаны с владельцем файла с тем же IBAction, как я могу определить, какая из них нажата?

Ответы [ 4 ]

26 голосов
/ 04 апреля 2011

Ваше действие может быть реализовано так:

- (IBAction) buttonTapped: (id) sender
// you can also replace id with UIButton*

Тогда внутри этого метода вы можете проверить с помощью -isEqual: метод

- (IBAction) buttonTapped: (id) sender
{
   if ([sender isEqual:referenceToOneOfYourButtons]) {
   // do something
   }
   else if ([sender isEqual:referenceToTheOtherButton]) {
   ...
   }
}

В качестве альтернативы вы можете установить различные значения для тегасвойство кнопок, а затем:

- (IBAction) buttonTapped: (UIButton*) sender
{
   const int firstButtonTag = 101;
   const int otherButtonTag = 102;

   if (sender.tag == firstButtonTag) {
   ...
   }
   else if (sender.tag == otherButtonTag) {
   ...
   }
}

Вам необходимо установить этот тег либо в .xib, либо в коде.

6 голосов
/ 04 апреля 2011

Что-то в этом духе ... при условии, что button1 и button2 находятся в вашем заголовочном файле.

- (IBAction)buttonPressed:(UIButton *)button {
        if (button == button1) {
        } else if (button == button2) {
        }
}

Или установите тег в Интерфейсном Разработчике и проверьте его.

- (IBAction)buttonPressed:(UIButton *)button {
            if (button.tag == 1) {
            } else if (button.tag == 2) {
            }
    }

Теги не начинаются с нуля. Используйте 1 или больше.

0 голосов
/ 15 апреля 2013

- (IBAction) myButtonAction: (id) отправитель {

    if ([sender tag] == 0) {
        // do something here
    }
    if ([sender tag] == 1) {
        // Do some think here
   }

}

// Другими словами

- (IBAction) myButtonAction: (id) отправитель {

     NSLog(@"Button Tag is : %i",[sender tag]);

    switch ([sender tag]) {
    case 0:
        // Do some think here
        break;
    case 1:
       // Do some think here
         break;
   default:
       NSLog(@"Default Message here");
        break;

}

0 голосов
/ 04 апреля 2011

Объявите ваше действие как

- (IBAction)someAction:(id)sender;

Когда элемент управления отправляет сообщение someAction, он отправляет себя вместе с параметром отправителя.

, например

- (IBAction)someAction:(id)sender {
    NSLog(@"sender: %@", sender);
}

Теперь вы знаете, какой элемент управления отправил сообщение.

...