这可能是一个愚蠢的问题,但我想知道我是否可以在目标 C 上复制控件的“事件处理程序”。例如,我有一个按钮“FIRST”,只要用户单击它,这个按钮就会触发方法“clickEventHandler”。现在我有一个按钮“SECOND”,我只需要第二个按钮的功能与第一个按钮的功能相似,无论第一个按钮做什么。
请给我一个解决方案。也欢迎任何推荐。
这可能是一个愚蠢的问题,但我想知道我是否可以在目标 C 上复制控件的“事件处理程序”。例如,我有一个按钮“FIRST”,只要用户单击它,这个按钮就会触发方法“clickEventHandler”。现在我有一个按钮“SECOND”,我只需要第二个按钮的功能与第一个按钮的功能相似,无论第一个按钮做什么。
请给我一个解决方案。也欢迎任何推荐。
鉴于按钮的目标和操作通常是使用 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 提问后):
为了以编程方式从按钮获取操作(和目标),action
只需target
访问NSButtonCell
.
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