我已尝试过几次设置几个相似的按钮,所有这些按钮都连接到相同的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)
他们全都连接到一个共同的IBAction,其内容如下:
@IBAction func activityButtonPressed(sender: NSButton) {
println("\(sender.title) Pressed")
}
这可以捕获实际的mosueDown事件并发送到func(如预期的那样)..
如何让他们在单选按钮模式下工作?即,在点击各种按钮时,它们的NSOnState和NSOffState是否会切换?
当我尝试将按钮类型更改为单选按钮时,它会自动翻转回"切换" ....
干杯,
A
答案 0 :(得分:7)
只需给NSRadioButtons提供相同的superview和动作即可。正如Good Doug在他的回答中指出的那样,
[...]如果您使用方形按钮样式,则无法使用无线电类型。您想在Interface Builder中使用On Off类型。
我真的不想让你的动作方法设置组中所有按钮的状态......让AppKit为你做这件事。
来自OS X Developer Release Notes: Cocoa Application Framework (10.10 and Earlier)
配置为单选按钮的NSButton(-buttonType设置为NSRadioButton)现在将在10.8及更高版本上链接的应用程序的单选按钮组中运行。要使按钮在无线电组中工作,请对每个NSButton实例使用相同的-action,并为每个按钮使用相同的superview。满足这些条件时,选中一个按钮(通过将-state更改为1)将取消选中所有其他按钮(通过将其-state设置为0)。
答案 1 :(得分:6)
由于您特别不想使用NSMatrix
...
第一个问题是,如果您使用方形按钮样式,则无法使用无线电类型。您想在Interface Builder中使用 On Off type 。
以下是我用于4个按钮的代码来测试它:
var buttonList : [NSButton] {
return [button1, button2, button3, button4]
}
@IBAction func buttonPressed(sender: NSButton) {
buttonList.forEach {
$0.state = $0 == sender ? .on : .off
}
}
正如您所看到的,它遍历所有按钮,测试它是否是按下的按钮。在关闭其他按钮的同时打开该按钮。 您需要从那里管理您想要的任何状态,或者检查所有按钮的状态:
func whichButton() -> ActivityState {
if button1.state == .on { return .one }
if button2.state == .on { return .two }
...
}
其中ActivityState.one
是一些枚举案例,可用于确定您所处的状态。
答案 2 :(得分:0)
没有第三方框架的替代解决方案,无需创建数组且没有任何重复循环。
Radio Button
个对象。在目标类中添加@IBOutlet
变量并连接按钮。
@IBOutlet weak var button1: NSButton!
@IBOutlet weak var button2: NSButton!
@IBOutlet weak var button3: NSButton!
@IBOutlet weak var button4: NSButton!
@IBOutlet weak var button5: NSButton!
添加变量currentOnStateButton
,其中包含对当前所选按钮的引用。
weak var currentOnStateButton : NSButton!
在viewDidLoad
或类似的早期调用方法中,为currentOnStateButton
变量指定默认按钮引用。
currentOnStateButton = button1
添加此activityButtonPressed
IBAction
方法并将所有按钮的操作连接到它,doActionForButtonx()
方法是虚拟方法。
@IBAction func activityButtonPressed(sender: NSButton) {
currentOnStateButton.state = NSOffState
sender.state = NSOnState
currentOnStateButton = sender
switch sender.tag {
case 100: doActionForButton1()
case 101: doActionForButton2()
case 102: doActionForButton3()
case 103: doActionForButton4()
case 104: doActionForButton5()
default : break
}
}
答案 3 :(得分:-3)
我相信您正在寻找NSMatrix:
您可以根据需要使用尽可能多的行和列对其进行配置:
然后,您可以选择是允许单个选项还是多种选择:
您可以使用sender.selectedColumn
和sender.selectedRow