2012-12-12 54 views
1

這可能是一個愚蠢的問題,但我想知道是否可以將目標C上的控件的「事件處理程序」複製或不復制。例如,我有一個「FIRST」按鈕,每當用戶單擊它時,此按鈕將觸發方法「clickEventHandler」。現在我有一個「SECOND」按鈕,我只需要第二個按鈕的功能與第一個按鈕的功能類似,不管第一個按鈕是什麼。我可以複製目標C上的「事件處理程序」嗎?

請給我一個解決方案。任何建議也歡迎。

回答

2

鑑於按鈕的目標和動作通常是使用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問題後):

爲了得到從按鈕的動作(和目標)編程,只需訪問NSButtonCellactiontarget性能。

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 
+0

謝謝,但我可以檢索第一個按鈕的事件處理程序? –

+0

@NguyenMinhBinh我已經更新了我的答案。 – trojanfoe

+0

+1太好了,這就是我所需要的。再次感謝。 –

相關問題