macOS - 如何在NSTableView中使用复选框?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了macOS - 如何在NSTableView中使用复选框?相关的知识,希望对你有一定的参考价值。

我正在尝试将复选框放到基于视图的tableView的第一列。我将一个复选框按钮拖到列上,然后结构就像

Table View
    First Column
        Check
            Check
        Text Cell

然后在我正在做的视图控制器的tableView方法中

if identifier == "Check" {
    let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "Check"), owner: self) as! NSTableCellView
    return cell
} 

我得到一个运行时错误Could not cast value of type 'NSButton' to 'NSTableCellView',这是正确的方法吗?

答案

这很简单。

在基于NSTableView的视图中,您可以使用任何继承自NSView的视图作为表格单元格视图。默认值为带有文本字段的NSTableCellView,但也可以使用控件对象(如NSTextFieldNSButton)而不使用任何基础自定义视图,只需将它们拖动到表视图画布中即可。

发生此错误是因为您必须将创建的视图强制转换为正确的类型。如果您使用复选框,则将视图投射到NSButton

不要以细胞为视角,从视角来思考。我甚至建议将变量命名为view而不是cell

NSUserInterfaceItemIdentifier扩展是定义常量的推荐模式

extension NSUserInterfaceItemIdentifier {
    static let check = NSUserInterfaceItemIdentifier(rawValue: "Check")
}

let view = tableView.makeView(withIdentifier: .check, owner: self) as! NSButton
另一答案

NSTableCellView有一个imageView和一个textField插座。你需要一个复选框,你可以添加一个。子类NSTableCellView并添加一个插座'checkBox'。在IB中,更改单元格视图的类,用复选框替换文本字段(或添加复选框)并连接“checkBox”插座。在tableView(_:viewFor:row:),使用checkBox而不是textField

以上是关于macOS - 如何在NSTableView中使用复选框?的主要内容,如果未能解决你的问题,请参考以下文章

与可变高度可编辑NSTextFields在MacOS的应用NSTableView的行

macOS开发之NSTableView的应用详解 - 转

MacOS-NSOutlineView使用

在 NSViewControllerRepresentable 中使用 SwiftUI Coordinator 和 NSTableView?

使用 SwiftUI 在 MacOS 中的多列 TableViews

如何快速响应来自 macOS 应用程序的“删除”命令?