我只想添加一个带有 setAction 参数的 NSButton。

NSRect frame = NSMakeRect(10, 40, 90, 40);
NSButton* pushButton = [[NSButton alloc] initWithFrame: frame];
[pushButton setTarget:self];
[pushButton setAction:@selector(myAction:)];

但我想给函数 myAction 一个参数...
如何 ?
谢谢。

最佳答案



你不能。



可以通过三种方式判断哪个按钮(或其他控件)正在与您对话:

  • 为每个按钮(或其他控件)分配一个标签,并在您的操作方法中比较这些标签。当您在 Nib 中创建控件时,其缺点是您必须编写两次标记(一次在代码中,一次在 Nib 中)。由于您是从头开始手写按钮,因此您没有这个问题。
  • 为您希望向您发送此消息的每个控件提供一个导出,并将 sender 与每个导出进行比较。
  • 有不同的 Action 方法,每个控件是唯一连接到每个 Action 的控件。然后每个操作方法不需要确定哪个控件向您发送了该消息,因为您已经知道它是通过哪个方法发送的。

  • 标签的问题在于上述重复性。也很容易忽略为每个标签命名,因此您最终会查看 if ([sender tag] == 42) 之类的代码,而不知道/不必查找哪个控件是 #42。

    网点的问题在于你的行动方法可能会变得很长,而且可能正在做多种不同的事情,而这些事情在同一种方法中没有任何业务。 (这也是标签的问题。)

    所以,我通常更喜欢第三种解决方案。为每个将您作为目标的按钮(或其他控件)创建一个操作方法。您通常会将方法和按钮命名为相同(例如 save: 和“Save”)或非常相似的名称(例如 terminate: 和“Quit”),因此您只需阅读每个方法即可知道它属于哪个按钮。

    关于cocoa - NSButton setAction 选择器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14104191/

    10-12 02:52