NSMattrix IBAction获得选定的无线电

时间:2012-06-28 05:49:08

标签: objective-c state radio nsbuttoncell

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

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

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

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

由于

2 个答案:

答案 0 :(得分:1)

如果您通过IBOutlets连接了所有内容,您可以随时查询两个按钮的状态(只要您的View Controller是拥有这些插座的那个,或者那些插座通过{{1}公开它们访问者)。

假设@propertybuttonOnebuttonTwo个NSButtons,您只需执行以下操作:

IBOutlet

- (IBAction) buttonAction: (id) sender { BOOL buttonOneIsOn = ([buttonOne state] == NSOnState); BOOL buttonTwoIsOn = ([buttonTwo state] == NSOnState); } NSCell降临的地方)有a very handy state method。我已经为你链接了文档。

答案 1 :(得分:0)

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

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

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

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

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

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

  • 将值绑定设置为“文件所有者”(如果这是实现属性的位置)。
  • 如果您使用了上述示例方法,请使用相应属性的关键路径self.radio1self.radio2

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