gpt4 book ai didi

cocoa - NSButton setAction 选择器

转载 作者:行者123 更新时间:2023-12-03 16:13:11 25 4
gpt4 key购买 nike

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

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

但我想给函数 myAction 添加一个参数...
怎么样?
谢谢。

最佳答案

But I want to put an argument to the function myAction...
How ?

你不能。

… if there is more than one button that uses this method, we can not differentiate the sender (only with title)...

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

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

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

outlet 的问题是你的操作方法可能会变得很长,并且无论如何可能会做多个不同的事情,而这些事情没有必要在同一个方法中进行。 (这也是标签的问题。)

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com