NSTableView 单元格中复选框的 IBAction,意外发件人

IBAction for checkbox in NSTableView cell, unexpected sender

我有一个基于单元格的 NSTableView,它在第一列中包含一个复选框。一切都显示并且似乎正常运行,除了复选框操作的处理,看起来像这样:

- (IBAction)ActiveCheckboxAction:(id)sender {
    // Do stuff with the checkbox
}

我惊讶地发现,当ActiveCheckboxAction被调用时,sender指向了table视图;不是复选框。为了解决这个问题,我正在寻找一种从当前选定行访问复选框的方法,所以我修改了代码,如下所示:

- (IBAction)ActiveCheckboxAction:(id)sender {
    NSTableCellView *cellView = [tableView viewAtColumn:0 row:[tableView selectedRow] makeIfNecessary:NO];
    NSButton *checkBox = [[cellView subviews] objectAtIndex:0];

    // Do stuff with the checkbox
}

在这里,cellView 始终为 nil,因此我猜测 viewAtColumn 仅适用于基于视图的 table 视图。在检查 table 视图时,我可以看到第一列的 _datacell 中的复选框正确描述为 (NSButton *),但我无法弄清楚如何访问此单元格以到达复选框。

两个问题: 为什么发件人会指向 table 视图? 如何从所选行中获取复选框?

谢谢!

Why would sender be pointing to the table view?

发件人是控件,在本例中是 table 视图。 NSTableViewNSControl 的子类。

What can I do to get the checkbox from the selected row?

复选框单元格在操作方法中 [sender selectedCell]

您可以使用 tableView:setObjectValue:forTableColumn:row: 而不是操作方法。对象值是复选框的状态 NSNumber.