Objective c 在源列表高亮显示的NSTableView中是否不允许空选择?

Objective c 在源列表高亮显示的NSTableView中是否不允许空选择?,objective-c,cocoa,nstableview,appkit,Objective C,Cocoa,Nstableview,Appkit,我觉得我可能在这里遗漏了一些明显的东西,但是如果我有一个NSTableView,它的突出显示设置为Source List,并且启用了空选择,我似乎无法单击表中的空行来清除选择 将突出显示改为常规会解决问题,但当然不会以我喜欢的方式绘制 该表没有绑定,并且使用自定义数据源。有没有办法克服这个限制?现在,我已经将以下内容添加到我的NSTableView子类中: - (void)mouseDown:(NSEvent *)theEvent { [super mouseDown:theEvent]

我觉得我可能在这里遗漏了一些明显的东西,但是如果我有一个NSTableView,它的突出显示设置为Source List,并且启用了空选择,我似乎无法单击表中的空行来清除选择

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


该表没有绑定,并且使用自定义数据源。有没有办法克服这个限制?

现在,我已经将以下内容添加到我的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];
        }
    }
}

您可以使用目标操作来实现这一点。在初始化过程中,请执行以下操作:

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];
    }
}
-(无效)singleClickAction:(id)发件人
{
NSInteger clickedRow=[发件人clickedRow];
如果(单击箭头<0){
[self.tableView:self];
}
}