我在NSWindow上放了一个NSMattrix。 这个NSMattrix包含2个单选按钮。
我宣布了3个IBOutlets: - 一个用于NSMattrix - 每个单选按钮一个(NSButtonCell)。
我宣布了1个IBAction方法:我在NSMattrix上的每个单选按钮上链接了相同的方法。 当我更改状态o单选按钮时,将自动调用此方法。大。 但是当我想知道这种方法中每个单选按钮的状态时,状态并不好。
如何在事件方法中获取每个单选按钮的状态?
由于
答案 0 :(得分:1)
如果您通过IBOutlets连接了所有内容,您可以随时查询两个按钮的状态(只要您的View Controller是拥有这些插座的那个,或者那些插座通过{{1}公开它们访问者)。
假设@property
和buttonOne
为buttonTwo
个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
是隐含意味着方法radio1
和setRadio1
都被调用的路径。如果将它们重命名为其他名称,请相应地调整路径名称。
编辑NIB / XIB时,依次选择NSMatrix的每个Button Cell并设置适当的绑定:
self.radio1
或self.radio2
。NSMatrix已经设置为一次只允许一个值,因此属性值将受到类似的限制。