2015-09-12 21 views
1

我正在寻找一种以编程方式将复选框放入NSTableView的第一列的方式。我想在Swift中做到这一点。我需要能够读取所有按钮的值,并在有人点击该行时设置按钮。如何在NSTableView中放置和控制复选框?

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

回答

1

您需要将表视图设置为基于视图而非基于单元格。恕我直言,最简单的方法是使用界面生成器将复选框放入表视图的第一列。它应该是你的文本字段的兄弟。我假设你想让第一列只包含一个复选框,而没有其他的东西。在这种情况下,您应该隐藏文本框,以便它不干扰复选框(单击界面生成器中的“隐藏”复选框以显示文本框)。

选项1:创建NSTableCellView的子类,命名为MyTableCellViewWithCheckbox,并给它一个@property (nonatomic,strong) NSButton *checkbox;变化从NSTableCellView自定义类领域MyTableCellViewWithCheckbox第一列和连接插座。

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

接下来,你需要一个动作连接到你的复选框,这样你就应该创建一个IBAction到您的视图控制器(未在MyTableCellViewWithCheckbox)。在行动方法,你可以使用tableviews rowForView方法获取的行索引用户刚刚点击的复选框。新的状态可以直接从动作的发送者那里接收(它是一个NSButton)。

另外,不要忘记,awakeFromNib可能会在你的视图控制器中被多次调用,如果你有一个表视图 - 一次为你实例化每个表视图单元格(这花了我一些时间来解决。)

+0

谢谢你的信息。我实际上能够使用基于单元格的NSView来实现它,并且它比基于表格的速度更快。我也会尽力回答。 – vy32

1

我能够通过使用基于单元格的NSTableView来实现这一点。使的TableView是这样的: Table View in Interface builder

设置的TableColumn看起来像这样:

tableCOlumn

设置buttonView看起来像这样:

enter image description here

选中复选框通过func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject?返回1作为支票,0作为非支票。