如何在 NSTableView 中放置和控制复选框?

How do you put and control a checkbox in an NSTableView?

我正在寻找一种以编程方式在 NSTableView 的第一列中放置复选框的方法。我想在 Swift 完成。我需要能够读取所有按钮的值并在有人单击该行时设置按钮。

有没有简单的方法来做到这一点?我找不到它...

您需要 table 视图是基于视图的,而不是基于单元格的。恕我直言,最简单的方法是使用界面生成器将复选框放入 table 视图的第一列。它应该是您的文本字段的兄弟。我假设您希望第一列只包含一个复选框,而没有其他内容。在这种情况下,您应该隐藏文本字段,这样它就不会干扰复选框(在文本字段的界面生成器中单击 "hidden" 复选框)。

选项 1:创建 NSTableCellView 的子class,将其命名为 MyTableCellViewWithCheckbox,并给它一个 @property (nonatomic,strong) NSButton *checkbox; 将第一列的自定义 class 字段从 NSTableCellView 更改为 MyTableCellViewWithCheckbox,然后连接插座。

选项 2:(我还没有测试过,但我认为它应该可以。)将复选框的标签设置为 13。稍后要从 table 视图单元格中检索复选框,您可以使用viewWithTag方法。

接下来,您需要将一个动作附加到您的复选框,因此您应该在视图控制器上创建一个 IBAction(而不是在 MyTableCellViewWithCheckbox 上。)在动作方法中,您可以使用 tableviews rowForView 方法获取用户刚刚点击的复选框的行索引。可以直接从动作的发送者(它是一个 NSButton)接收新状态。

此外,如果您有一个 table 视图,请不要忘记 awakeFromNib 可能会在您的视图控制器中被多次调用 - 每个 table 视图单元一次实例化(这花了我一些时间才弄清楚。)

我能够通过使用基于单元格的 NSTableView 来做到这一点。使 TableView 看起来像这样:

将 tableColumn 设置为如下所示:

将 buttonView 设置为如下所示:

设置复选框 func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject? return 1 表示选中,0 表示不选中。