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太好了,这就是我所需要的。再次感谢。 –