Определите, какая кнопка нажата с массивом UIButton - PullRequest
6 голосов
/ 22 июля 2011

У меня есть массив UIButton, подобный этому:

@property (nonatomic, retain) IBOutletCollection(UIButton) NSArray *btn_Impact_Collection;

и у меня есть эта функция:

- (IBAction)impactAction:(id)sender;

В файле XIB у меня есть девять кнопок, каждая кнопка связана с массивом btn_Impact_Collection с Referencing Outlet Collection. Кроме того, свойство Touch_inside каждой кнопки связано с функцией ImpactAction.

Теперь, когда нажимается кнопка, вызывается функция ImpactAction, но как внутри этой функции узнать, какая кнопка нажата?

Заранее спасибо за ответ!

Ответы [ 4 ]

15 голосов
/ 22 июля 2011

Приведите отправителя к классу UIButton, и это даст вам экземпляр нажатой кнопки. У меня нет Xcode со мной, но что-то вроде:

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

    // Then you can reference the title or a tag of the clicked button to do some further conditional logic if you want.
    if([btn.currentTitle isEqualToString:@"title of button"])
    {
        // do something.
    }
    else if(etc...)
}
13 голосов
/ 22 июля 2011

Установите теги для каждой кнопки в конструкторе интерфейсов (1-9), затем произнесите

if ([sender tag] == 1) {
//First button was pressed, react.
}
else if ([sender tag] == 2) {
//Second button was pressed, react.
}
// Etc...
else {
//Last button was pressed, react.
}

И то же самое для всех остальных, или вы можете включить его в выключатель.

3 голосов
/ 12 марта 2013

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

- (void)buttonPressed:(id)sender
{
    for( UIButton *button in self.buttonCollection )
    {
        if( sender == button )
        {
            // sender is your button (eg. you can access its tag)
        }
    }
}
0 голосов
/ 10 декабря 2014

Другой вариант. Приведите отправителя, чтобы проверить, является ли это UIButton, затем переключите sender.tag:

if ([sender isMemberOfClass:[UIButton class]]) {
        switch ([sender tag]) {
            case 0:
                //do stuff for button with tag 0
                break;

            case 1:
                //do stuff for button with tag 1
                break;

            case 2:
                ....
                break;

            default:
                break;
        }
    }
...