1
這可能是一個愚蠢的問題,但我想知道是否可以將目標C上的控件的「事件處理程序」複製或不復制。例如,我有一個「FIRST」按鈕,每當用戶單擊它時,此按鈕將觸發方法「clickEventHandler」。現在我有一個「SECOND」按鈕,我只需要第二個按鈕的功能與第一個按鈕的功能類似,不管第一個按鈕是什麼。我可以複製目標C上的「事件處理程序」嗎?
請給我一個解決方案。任何建議也歡迎。
這可能是一個愚蠢的問題,但我想知道是否可以將目標C上的控件的「事件處理程序」複製或不復制。例如,我有一個「FIRST」按鈕,每當用戶單擊它時,此按鈕將觸發方法「clickEventHandler」。現在我有一個「SECOND」按鈕,我只需要第二個按鈕的功能與第一個按鈕的功能類似,不管第一個按鈕是什麼。我可以複製目標C上的「事件處理程序」嗎?
請給我一個解決方案。任何建議也歡迎。
鑑於按鈕的目標和動作通常是使用Interface Builder設置的,我認爲最好的解決方案可能是有一個「路由」事件的通用方法。因此,有兩個按鈕調用:
- (IBAction)eventRouter:(id)sender
{
// Don't forget to set the button's tag in IB!
NSInteger tag = [sender tag];
switch (tag)
{
case BUTTON1_TAG:
[self button1Method:sender];
break;
case BUTTON2_TAG:
[self button2Method:sender];
break;
default
break;
}
}
然後,您可以在運行時更改路由而不需要編輯IB中的按鈕。
編輯(從OP問題後):
爲了得到從按鈕的動作(和目標)編程,只需訪問NSButtonCell
的action
和target
性能。
NSButton *button = (NSButton *)sender; // Or perhaps from an IBOutlet
id target = button.cell.target;
SEL action = button.cell.action;
// Call the button's action selector
[target performSelector:action withObject:self]; // or withObject:sender
謝謝,但我可以檢索第一個按鈕的事件處理程序? –
@NguyenMinhBinh我已經更新了我的答案。 – trojanfoe
+1太好了,這就是我所需要的。再次感謝。 –