0

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

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

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

4

2 回答 2

1

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

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

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

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

于 2013-07-06T05:41:34.137 回答
1

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

for (id subview in _buttonView.subviews)
    if ([subview isKindOfClass:[UIButton class]])
        [(UIButton *)subview addTarget:self 
                             selector:@selector:(playSound)    
                             forControlEvents:UIControlEventTouchUpInside];
于 2013-07-06T06:00:23.540 回答