NSButton RadioGroup(NSMatrix Alternative)

Adr*_*ers 10 nsbutton swift

我已经尝试过几次设置几个相似的按钮,都连接到相同的IBActions,但仍然无法复制RadioButton行为.

目前,我有5个按钮,一个NSView的所有孩子..

NSView
    - ButtonOne - NSButton (Square Button)
    - ButtonTwo - NSButton (Square Button)
    - ButtonThree - NSButton (Square Button)
    - ButtonFour - NSButton (Square Button)
    - ButtonFive - NSButton (Square Button)
Run Code Online (Sandbox Code Playgroud)

它们都与一个共同的IBAction相关联,其内容如下:

@IBAction func activityButtonPressed(sender: NSButton) {

    println("\(sender.title) Pressed")

}
Run Code Online (Sandbox Code Playgroud)

这可以捕获实际的mosueDown事件并发送到func(如预期的那样).

如何让他们在单选按钮模式下工作?即点击各种按钮时,是否有NSOnState和NSOffState切换?

当我尝试将按钮类型更改为单选按钮时,它会自动翻转回"切换"....

干杯,

一个

小智 8

只需给NSRadioButtons提供相同的superview和动作即可.正如Good Doug在他的回答中所指出的,

[...]如果您使用方形按钮样式,则不能使用无线电类型.您想在Interface Builder中使用On Off类型.

我真的不认为你想让你的动作方法设置组中所有按钮的状态...让AppKit为你做.

来自OS X Developer发行说明:Cocoa应用程序框架(10.10及更早版本)

配置为单选按钮的NSButton(-buttonType设置为NSRadioButton)现在将在10.8及更高版本上链接的应用程序的单选按钮组中运行.要使按钮在无线电组中工作,请对每个NSButton实例使用相同的-action,并为每个按钮使用相同的superview.满足这些条件时,选中一个按钮(通过将-state更改为1)将取消选中所有其他按钮(通过将其-state设置为0).


Goo*_*oug 6

因为你特别不想使用NSMatrix...第一个问题是,如果你使用方形按钮样式,你不能使用无线电类型.您想在Interface Builder中使用On Off类型.

这是我用于测试这个的4个按钮的代码:

var buttonList : [NSButton] {
    return [button1, button2, button3, button4]
}

@IBAction func buttonPressed(sender: NSButton) {
    buttonList.forEach {
        $0.state = $0 == sender ? .on : .off
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,它遍历所有按钮,测试它是否是按下的按钮.在关闭其他按钮的同时打开该按钮.您需要从那里管理您想要的任何状态,或者检查所有按钮的状态:

func whichButton() -> ActivityState {
   if button1.state == .on { return .one }
   if button2.state == .on { return .two }
   ...
}
Run Code Online (Sandbox Code Playgroud)

哪些ActivityState.one是枚举案例,您可以使用它来确定您所处的状态.

  • 这些管理都不是必需的——如果所有单选按钮都具有相同的目标/操作,那么您可以免费获得功能。https://youtu.be/yaJPJdZZ6CM (3认同)