在控制器视图中访问复选框(NSButton)

时间:2017-09-27 07:43:18

标签: swift xcode macos cocoa

我在OS X应用程序中有一个带有50个复选框的视图(NSButton)。我需要在代码中访问每一个,但我找到的唯一方法是创建50个IBOutlet绑定。 OSO中没有IBOutlet集合。我该怎么办?

1 个答案:

答案 0 :(得分:0)

引用ViewController类中的50个复选框(我假设您使用视图控制器)的一种方法是首先检索包含50个复选框中每个复选框的超级视图。这将是一个NSView对象。为了区分复选框,我建议在界面构建器中设置不同的标记值,但这实际上取决于您要对复选框执行的操作。然后,您可以使用循环遍历此视图中的每个子视图,如下所示:

for i in view.subviews.filter({$0 as? NSButton != nil}).map({$0 as! NSButton}) {
    if i.bezelStyle == .regularSquare && !(i.cell as! NSButtonCell).imageDimsWhenDisabled {
        print(i.title)
    }
}

if条件基本上使用复选框的两个属性来区分它们与任何其他类型的NSButton

在这个例子中,我只打印了每个复选框的标题。如果要根据复选框执行不同的任务,可以使用switch语句。好处是,使用此方法,您可以拥有无​​限多个复选框。迭代顺序从左到右,从上到下。