为多个Cocoa UI对象分配相同的Action方法,例如NSButton可能吗?

时间:2011-02-05 18:34:46

标签: objective-c cocoa interface-builder cocoa-bindings

我目前正在学习来自Java世界的ObjC和Cocoa编程。 为了测试我目前的技能和学习进度,我正在从头开始创建一个小型计算器应用程序(OSX而不是iOS)。

我的用户界面有10个数字按钮0-9等。

我的第一个想法是,因为动作收到了发件人的参考,所以做出一个动作 比如-(IBAction)captureDigit:(id)sender,然后从按钮标题中抓取数字。 但是界面构建器只允许动作与看起来的一个发送者连接。

所以我最终在我的控制器中创建了10个captureDigit动作。

我的问题: 是某种可能的第一种选择吗?我想过以编程方式添加动作(这可能吗?)到按钮,但是我必须将所有数字按钮作为插座添加到我的控制器。

奖金问题: NSButton可以保持某种不可见的价值吗?在文档中找不到这个。 也许这会违反MVC模式,因为UI会知道特定于应用程序的数据?

感谢您提前做出任何有用和善意的答复,我还在学习

4 个答案:

答案 0 :(得分:4)

如果您控制 - 从发件人拖动到目标,您可以将许多发件人连接到一个目标/操作,这样就不会有问题。

写下您的红利问题,任何NSView都有一个整数tag,您可以在Interface Builder中设置它。这是区分多个相似视图的便捷方式。

答案 1 :(得分:2)

您绝对可以将多个按钮连接到单个操作。此外,您可以使用任何对象的tag字段为其提供“幕后”值。

答案 2 :(得分:0)

完全可以向单个控制器添加任意数量的操作。 Interface Builder如何阻止您这样做?

你可以在你的控制器中有一个NSDictionary实例,你可以在其中将NSButtons与你想要的任何数据相匹配。

答案 3 :(得分:0)

为了方便起见,在IB中创建一个按钮并从NSButton拖动到File的所有者,然后显示我们可以发送给NSButton的所有方法,然后选择captureDigit:。现在复制并粘贴按钮更改标题,复制并粘贴在IB中保持连接并使用标记字段作为costique,nitrex已经说过了。