2013-07-06 2 views
0

Я надеюсь, что ответ на этот вопрос так же прост, как сам вопрос.Добавить цель ко всем событиям UIButtons touchUpInside

У меня есть звуковой эффект в AVAudioPlayer, который я хочу играть, когда каждую кнопку нажата. Теперь вместо того, чтобы вручную добавлять цель для воспроизведения этого аудиофайла в каждый кнопка в моем коде, есть способ, которым я могу переопределить метод event touch (в файле категории расширения) и отправить вызов на AVPlayer в дополнение к отправке вызова супер?

Я не хочу иметь подкласс, если мне это не нужно. Есть ли метод делегата, который я могу использовать?

+2

Переопределение методов базового класса в категории файл обычно плохая форма – JiuJitsuCoder

+0

Можете ли вы предложить другой способ? – David

+0

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

ответ

1

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

for (id subview in _buttonView.subviews) 
    if ([subview isKindOfClass:[UIButton class]]) 
     [(UIButton *)subview addTarget:self 
          selector:@selector:(playSound)  
          forControlEvents:UIControlEventTouchUpInside]; 
1

В таких случаях лучшим способом является подкласс родительского представления вашего вида кнопки. Если вы добавляете кнопки в классе UIView, подкласс класса из UIView. Таким образом, вам нужно будет изменить только одно место в коде.

Теперь в подклассе переопределить этот метод:

- (void)didAddSubview:(UIView *)subview; 

Он будет вызван, когда любой из подвидов будут добавлены к нему. Определите правильное подвыборку в методе и выполните любую обработку над подзапросом, который вы хотите.

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