我觉得我可能在这里遗漏了一些明显的东西,但是如果我有一个 NSTableView,它的 Highlight 设置为 Source List 并且启用了 Empty 选择,我似乎无法单击表格中的空白行来清除选择。
将 Highlight 更改为常规可以解决问题,但当然不会以我想要的方式绘制。
该表没有绑定并使用自定义数据源。有没有办法解决这个限制?
我觉得我可能在这里遗漏了一些明显的东西,但是如果我有一个 NSTableView,它的 Highlight 设置为 Source List 并且启用了 Empty 选择,我似乎无法单击表格中的空白行来清除选择。
将 Highlight 更改为常规可以解决问题,但当然不会以我想要的方式绘制。
该表没有绑定并使用自定义数据源。有没有办法解决这个限制?
您可以使用目标操作来完成此操作。在初始化期间执行以下操作:
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];
}
}
现在,我最终将以下内容添加到我的 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];
}
}
}