如何在Cocoa应用程序中(从Storyboard中)分组单选按钮?

5

我正在尝试在Cocoa应用程序中对2个单选按钮进行分组。

但与iOS不同的是,您无法使用控件拖动将按钮连接起来(如图所示)enter image description here

在Cocoa应用程序中,我没有找到任何优雅的方法来做到这一点...

在我做出丑陋的事情之前,有什么建议吗?

4个回答

14
NSMatrix曾经是解决方案,但现在已不再推荐使用:
注意:在运行于OS X v10.8及更高版本的应用程序中,不建议使用NSMatrix。如果您需要在运行于OS X v10.8及更高版本的应用程序中创建一个单选按钮组,请为该组中的每个按钮创建NSButton实例,每个实例都指定NSRadioButton类型的按钮,并为每个按钮指定相同的动作和相同的父视图。
如果所有按钮调用相同的动作方法并且位于相同的父视图中,Cocoa会自动选择被点击的按钮并取消选择之前的按钮,无需编写任何代码来实现这一点。

这个答案的最后一部分是唯一相关的部分:只需分配相同的事件处理程序,一切都会按预期工作。 - Ely
没错,Ely,所以我缩短了答案。 - Ron Reuter

4
我发现这个方法(可能不太优雅):
  1. 控制拖动单个单选按钮以创建一个发送操作。
  2. 将其他按钮控制拖到同一个(空)函数中。
你必须将鼠标悬停在函数上才能连接它。
现在它们被分组了。

这太棒了。 - nmnir

1

这里是我不太优雅的解决方案 -

  1. 在类中定义按钮数组:

NSArray* _radioButtonsArray;

  1. initialize it in viewDIdLoad:

    _radioButtonsArray = [[NSArray alloc] initWithObjects:_radioButton1,_radioButton2,_radioButton3, nil];
    
  2. define a radioButtonIsPressed method and connect it to all radio buttons as an action:

    -(IBAction)radioButtonIsPressed:(id)sender{ for (NSButton* btn in _radioButtonsArray){ if (btn != sender) [btn setState:0]; } }


0

我使用控制拖动单选按钮来创建一个IBAction。然后我将单选按钮复制/粘贴到同一个视图上。现在有两个具有相同IBAction的单选按钮。Cocoa将它们视为分组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接