2013-07-06 27 views
0

我希望這個問題的答案和問題本身一樣簡單。將目標添加到所有UIButton的touchUpInside事件

我在AVAudioPlayer中有一個音效,當我按時每按按鈕時,我想播放它。現在,在我的代碼中,不是手動添加一個目標來播放該音頻文件到按鈕,有沒有一種方法可以覆蓋touchUpInside事件方法(可能位於擴展類別文件中)並將呼叫發送到AVPlayer除了發送電話給超級?

如果我不需要,我不想要子類。有沒有我可以使用的委託方法?

+2

重載類別中的基類的方法文件通常是不好的形式 – JiuJitsuCoder

+0

你能提出另一種方式嗎? – David

+0

當然,創建一個可以在你認爲合適的init中添加目標的子類。 –

回答

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; 

當任何一個子視圖將被添加到它,它就會被調用。在方法中確定合適的子視圖,並對所需的子視圖執行任何處理。

相關問題