gpt4 book ai didi

objective-c - 带有 NSCheckBox 单元格的 NSTableView - 如何拦截行选择?

转载 作者:行者123 更新时间:2023-11-28 10:24:12 26 4
gpt4 key购买 nike

我有一个 NSTableView,其单元格包含 NSCheckBox。我想更改它的行为,以便可以单击表格中的任何行,并相应地打开/关闭该行中的复选框。

我觉得可以用

    func tableView(tableView: NSTableView, shouldSelectRow row: Int) -> Bool {
}

此方法提供被单击行的索引,我可以使用它以编程方式从那里切换复选框。但问题是 NSCheckBox 会拦截鼠标在其行上的点击。有什么方法可以禁用它以便可以完全单击行?将 NSCheckBox 的启用状态设置为 false 将允许这样做,但它也会使复选框及其标题变灰。

编辑:

阐明我需要什么:(基于 View 的)表格单元格 View 包含一个复选框。如果用户单击复选框,它会切换,但是当在没有复选框的任何地方单击该行时,什么也不会发生。我希望单击该行并相应地切换复选框。所以基本上我希望复选框不可点击,并且表格行在单击该行时通知其中的复选框。

最佳答案

在基于单元格的 TableView 中,您可以实现-selectionShouldChangeInTableView:。我假设这也适用于基于 View 的 TableView 。

- (BOOL)selectionShouldChangeInTableView:(NSTableView *)tableView
{
NSInteger clickedColumn = tableView.clickedColumn;
NSInteger attributeEnabledColumn = [tableView columnWithIdentifier:@"attributeEnabled"];

if (clickedColumn == attributeEnabledColumn) {
NSInteger clickedRow = tableView.clickedRow;

if (clickedRow >= 0) {
NSArrayController *attributesArrayController = self.attributesArrayController;
NSMutableDictionary *attributeRow = [attributesArrayController.arrangedObjects objectAtIndex:clickedRow];
BOOL attributeEnabled = [attributeRow[kAttributeSelectionAttributeEnabledKey] boolValue];

attributeRow[kAttributeSelectionAttributeEnabledKey] = @(!attributeEnabled);
}

return NO;
}

return YES;
}

关于objective-c - 带有 NSCheckBox 单元格的 NSTableView - 如何拦截行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29998810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com