NSTableView中的空选择是否允许使用源列表突出显示?

时间:2012-06-28 00:29:26

标签: objective-c cocoa nstableview appkit

我觉得我可能会遗漏一些明显的东西,但如果我有一个NSTableView,它的突出显示设置为源列表并启用了空选择,我似乎无法点击表格中的空白行清除选择。

将突出显示更改为常规修复问题,但当然不会以我喜欢的方式绘制。

该表没有绑定并使用自定义数据源。有办法解决这个限制吗?

2 个答案:

答案 0 :(得分:1)

现在,我最终将以下内容添加到我的NSTableView子类中:

- (void)mouseDown:(NSEvent *)theEvent
{
    [super mouseDown:theEvent];

    if ( [self allowsEmptySelection] && [self selectionHighlightStyle] == NSTableViewSelectionHighlightStyleSourceList )
    {
        NSInteger row = [self rowAtPoint:[self convertPoint:[theEvent locationInWindow] fromView:nil]];
        if ( row == -1 )
        {
            [self deselectAll:nil];
        }
    }
}

答案 1 :(得分:1)

您可以使用目标操作来完成此操作。在初始化期间执行以下操作:

self.tableView.delegate             = self;
self.tableView.dataSource           = self;
self.tableView.target               = self;
self.tableView.action               = @selector(singleClickAction:);
self.tableView.allowsEmptySelection = YES;

然后为您的班级添加一个方法:

- (void)singleClickAction:(id)sender
{
    NSInteger clickedRow = [sender clickedRow];
    if (clickedRow < 0) {
        [self.tableView deselectAll:self];
    }
}