如何在 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 表示不选中。
我正在寻找一种以编程方式在 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 表示不选中。