NSButton setAction选择器

Sim*_* V. 4 cocoa nsbutton

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

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

但是我想对函数myAction设置参数

谢谢。

Pet*_*sey 5

但是我想对函数myAction设置参数

你不能

…如果使用此方法的按钮不止一个,我们将无法区分发送者(仅带有标题)...

有三种方法可以确定哪个按钮(或其他控件)正在与您对话:

  • 为每个按钮(或其他控件)分配一个标签,并比较您的操作方法中的标签。在笔尖中创建控件时,它的缺点是必须两次编写标签(在代码中一次,在笔尖一次)。由于您是从头开始手动写出按钮,因此您不会遇到问题。
  • 为您希望向您发送此消息的每个控件都有一个插座,并将其sender与每个插座进行比较。
  • 有不同的动作方法,每个控件是唯一连接到每个动作的控件。然后,每个操作方法都无需确定哪个控件向您发送了该消息,因为您已经知道它是哪种方法。

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

网点的问题在于您的操作方法可能会变得很长,并且无论如何可能正在做多种不同的事情,而同一方法中没有事务。(这也是标签的问题。)

因此,我通常更喜欢第三个解决方案。为每个将您作为目标的按钮(或其他控件)创建一个动作方法。您通常将方法和按钮命名为相同的名称(如save:“保存”)或非常相似的名称(如terminate:“退出”),因此只需阅读每个方法,便知道该按钮属于哪个按钮。