将目标添加到所有UIButtons的touchUpInside事件

时间:2013-07-06 04:02:29

标签: ios objective-c uibutton uicontrolevents

我希望这个问题的答案和问题本身一样简单。

我在按下每个按钮时要播放的AVAudioPlayer中有声音效果。现在,不是手动添加目标以将音频文件播放到我的代码中的 每个 按钮,有没有办法可以覆盖touchUpInside事件方法(可能在扩展中)类别文件)并将呼叫发送到AVPlayer除了将呼叫发送到超级?

如果我不需要,我不想要子类。我可以使用委托方法吗?

2 个答案:

答案 0 :(得分:1)

在这种情况下,最好的方法是将按钮视图的父视图子类化。如果要在UIView类中添加按钮,则从UIView继承您的类。因此,您只需更改代码中的一个位置。

现在,在子类中重写此方法:

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

当任何子视图添加到它时,它将被调用。确定方法中的正确子视图,并对子视图进行任何处理。

答案 1 :(得分:1)

从任何引用包含按钮作为子视图的视图的类中,您可以遍历所有子视图并查看哪些是UIButtons:

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