0

この質問の答えが質問自体と同じくらい簡単であることを願っています。

すべてのボタンが押されたときに再生したい AVAudioPlayer に効果音があります。そのオーディオ ファイルを再生するターゲットをコード内のすべてのボタンに手動で追加するのではなく、touchUpInside イベント メソッド (おそらく拡張カテゴリ ファイル内) をオーバーライドし、送信に加えて AVPlayer に呼び出しを送信する方法はありますか?スーパーへの呼び出し?

必要がなければ、サブクラス化する必要はありません。使用できるデリゲート メソッドはありますか?

4

2 に答える 2

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 に答える
1

このような場合、最善の方法は、ボタン ビューの親ビューをサブクラス化することです。ボタンを UIView クラスに追加する場合は、クラスを UIView からサブクラス化します。したがって、コード内の 1 か所だけを変更する必要があります。

ここで、サブクラスでこのメソッドをオーバーライドします。

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

サブビューのいずれかが追加されると呼び出されます。メソッドで適切なサブビューを識別し、サブビューに対して必要な処理を行います。

于 2013-07-06T05:41:34.137 に答える