swift - 访问 Controller View 中的复选框 (NSButton)

标签 swift xcode macos cocoa

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

最佳答案

引用 ViewController 类中的 50 个复选框(我假设您使用 View Controller )的一种方法是首先检索包含 50 个复选框的 super View 。这将是一个 NSView 对象。为了区分复选框,我建议在界面生成器中设置不同的标签值,但这实际上取决于您想要对复选框执行什么操作。然后,您可以使用循环来迭代此 View 中的每个 subview ,如下所示:

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 语句。好处是,通过这种方法,您可以拥有无​​限多个复选框。迭代顺序是从左到右、从上到下。

关于swift - 访问 Controller View 中的复选框 (NSButton),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46442152/

相关文章:

ios - 根据位置删除图像的ScrollView

xcode - 在自定义标签中附加不同大小的字体

ios - iOS 中的无线配件配置 (WAC) 集成以及如何使用

ios - Xcode 关闭控制台输出中的自动布局相关警告

macos - 注册一个 OS X 服务以接受无输入或 NSPasteboard 输入

ios - Swift UI 标签,行间距 + 动态线宽

swift - SpriteKit 缩放

ios - 如何在应用程序委托(delegate)中更改应用程序语言?

ios - 从被拒绝的证书中清除 XCode 缓存

python - 如何检查库是否是在 Mac OS X 上构建的 32 位/64 位?