我希望这个问题的答案和问题本身一样简单。
我在按下每个按钮时要播放的AVAudioPlayer中有声音效果。现在,不是手动添加目标以将音频文件播放到我的代码中的 每个 按钮,有没有办法可以覆盖touchUpInside事件方法(可能在扩展中)类别文件)并将呼叫发送到AVPlayer除了将呼叫发送到超级?
如果我不需要,我不想要子类。我可以使用委托方法吗?
答案 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];