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 视图。 NSTableView
是 NSControl
的子类。
What can I do to get the checkbox from the selected row?
复选框单元格在操作方法中 [sender selectedCell]
。
您可以使用 tableView:setObjectValue:forTableColumn:row:
而不是操作方法。对象值是复选框的状态 NSNumber
.
我有一个基于单元格的 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 视图。 NSTableView
是 NSControl
的子类。
What can I do to get the checkbox from the selected row?
复选框单元格在操作方法中 [sender selectedCell]
。
您可以使用 tableView:setObjectValue:forTableColumn:row:
而不是操作方法。对象值是复选框的状态 NSNumber
.