我希望這個問題的答案和問題本身一樣簡單。將目標添加到所有UIButton的touchUpInside事件
我在AVAudioPlayer中有一個音效,當我按時每按按鈕時,我想播放它。現在,在我的代碼中,不是手動添加一個目標來播放該音頻文件到每按鈕,有沒有一種方法可以覆蓋touchUpInside事件方法(可能位於擴展類別文件中)並將呼叫發送到AVPlayer除了發送電話給超級?
如果我不需要,我不想要子類。有沒有我可以使用的委託方法?
我希望這個問題的答案和問題本身一樣簡單。將目標添加到所有UIButton的touchUpInside事件
我在AVAudioPlayer中有一個音效,當我按時每按按鈕時,我想播放它。現在,在我的代碼中,不是手動添加一個目標來播放該音頻文件到每按鈕,有沒有一種方法可以覆蓋touchUpInside事件方法(可能位於擴展類別文件中)並將呼叫發送到AVPlayer除了發送電話給超級?
如果我不需要,我不想要子類。有沒有我可以使用的委託方法?
從有到包含按鈕的子視圖,您可以通過所有的子視圖只是想迭代,看看哪些是UIButtons視圖的參考任何類:
for (id subview in _buttonView.subviews)
if ([subview isKindOfClass:[UIButton class]])
[(UIButton *)subview addTarget:self
selector:@selector:(playSound)
forControlEvents:UIControlEventTouchUpInside];
在這種情況下,最好的辦法是對你的按鈕視圖的父視圖進行子類化。如果你要在UIView類中添加按鈕,那麼從UIView子類化你的類。所以,你將不得不改變代碼中的一個地方。
現在,在子類中重寫此方法:
- (void)didAddSubview:(UIView *)subview;
當任何一個子視圖將被添加到它,它就會被調用。在方法中確定合適的子視圖,並對所需的子視圖執行任何處理。
重載類別中的基類的方法文件通常是不好的形式 – JiuJitsuCoder
你能提出另一種方式嗎? – David
當然,創建一個可以在你認爲合適的init中添加目標的子類。 –