0

我在 NSWindow 上放了一个 NSMattrix。这个 NSMattrix 包含 2 个单选按钮。

我声明了 3 个 IBOutlets: - 一个用于 NSMattrix - 每个单选按钮(NSButtonCell)一个。

我声明了 1 个 IBAction 方法:我在 NSMattrix 上的每个单选按钮 ant 上都链接了相同的方法。当我更改单选按钮的状态时,会自动调用此方法。伟大的。但是当我想知道这个方法中每个单选按钮的状态时,状态并不好。

我应该如何在事件方法中获取每个单选按钮的状态?

谢谢

4

2 回答 2

1

如果您通过 IBOutlets 连接了所有东西,您可以随时简单地查询这两个按钮的状态(只要您的视图控制器是拥有这些插座的那个,或者这些插座通过@property访问器公开它们)。

假设buttonOnebuttonTwoIBOutletNSButtons,您可以简单地执行以下操作:

- (IBAction) buttonAction: (id) sender
{
    BOOL buttonOneIsOn = ([buttonOne state] == NSOnState);
    BOOL buttonTwoIsOn = ([buttonTwo state] == NSOnState);
}

NSCell(它的NSButtonCell后代)有一个非常方便的state方法。我已经为您链接了文档。

于 2012-06-28T05:58:49.587 回答
0

对于这种情况,我强烈建议使用 Cocoa Bindings;这实际上是使用绑定的更简单方法之一。

使用绑定,可以为您处理用户界面同步。这意味着您实际上不需要查询单选按钮的状态;您只需查询按钮绑定到的属性。

您只需要属性,而不是实现操作方法。例如,- (BOOL) radio1;, - (void) setRadio1:(BOOL) flag;, - (BOOL) radio2;and - (void) setRadio2:(BOOL) flag;(但给这些方法起更好的名字)。您可以@property在更高版本的 Objective-C 中使用这些。BOOL在您的班级中为每个字段放置字段。

编辑 NIB/XIB 文件时,可以将属性分配给单选按钮。

根据键值编码的规则,self.radio1是一条路径,隐含地表示方​​法radio1setRadio1都被调用。如果您将它们重命名为其他名称,请相应地调整路径名称。

编辑 NIB/XIB 时,依次选择 NSMatrix 的每个 Button Cell 并设置适当的绑定:

  • 将值绑定设置为“文件的所有者”(如果这是实现属性的地方)。
  • 使用适当属性的键路径(self.radio1或者self.radio2,如果您有上述示例方法)。

NSMatrix 已经设置为一次只允许一个值,因此属性值将受到类似限制。

于 2012-06-28T06:30:43.000 回答