2013-07-20 4 views
1

Я хочу, чтобы можно было определить, какая кнопка нажата. Интересно, есть ли какой-нибудь метод класса UIButton, который может быть вызван автоматически при нажатии кнопки, что позволяет мне узнать текст или тег кнопки нажатой и передать это переменной? Или какой-то объектный метод event-c, который делает то же самое?Обнаружение нажатой кнопки

Я знаю, что эта тема была опубликована здесь раньше. Общий ответ, кажется, что это будет решение:

В файле .h

- (IBAction)buttonClicked:(UIButton *)sender; 

В .m файл

- (IBAction)buttonPressed:(UIButton *)sender{ 
// Do something her to display which button pressed 
} 

Я также видел другие примеры с такими именами, как buttonPressed , onButtonTao и т. д.

Поэтому я предполагаю, что этот метод нужно вызывать с каждой кнопки. Однако это не работает, xcode жалуется, когда я пытаюсь назначить один и тот же метод более чем одной кнопке.

Следующий пример, оставленных здесь в Stack, использует те же действия, но программно:

for(int i = 0; i < 5; i++) { 
    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [aButton setTag:i]; 
    [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [aView addSubview:aButton]; 
} 

// then ... 

- (void)buttonClicked:(UIButton*)button 
{ 
    NSLog(@"Button %ld clicked.", (long int)[button tag]); 
} 

Итак, что я здесь отсутствует, почему Xcode не принимает один и тот же метод для нескольких кнопок? И есть ли другой способ определить, какая кнопка нажата, не подключая определенное действие к каждой кнопке?

+1

Каким образом Xcode жалуется? – Wain

+1

Подключение нескольких элементов управления к одному и тому же методу действия является, безусловно, возможным. Вы должны быть более конкретными в этой проблеме. –

ответ

0

Вы можете подключить несколько кнопок к одному и тому же методу действий в Xcode. После создания и подключения первого действия, управление перетащите остальные кнопки для существующего действия в файле .h:

enter image description here

Затем вы можете назначить различные теги к кнопкам в Инспекторе Атрибутов , и проверьте [sender tag] в методе действия.

Если вы создаете новое одноименное действие, Xcode создает другой метод с тем же именем, что приведет к ошибкам компилятора из-за «дублирования деклараций».

+0

Я знал, что это было так просто, что, когда я получил ответ, я почувствовал бы «конечно» :-) Спасибо! –

0

Похоже, вы пытаетесь скопировать-Вставить этот Sample в свой код, и он не работает, не так ли? Вы должны предоставить Рамка к кнопкам.

Здесь Рабочий код:

for(int i = 0; i < 5; i++) 
{ 
    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    aButton.frame = CGRectMake(10 + i*50,10,50,50); 
    [aButton setTag:i]; 
    [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:aButton]; 
} 

Здесь, кадр не должен быть статичным иначе кнопки будут перекрываться.

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