默认情况下,NSTableView 允许用户通过单击表格视图空白区域的任意位置来清除行选择。然而,这并不总是直观的,有时甚至是不可能的(例如,当表格视图本身实际上没有任何空白区域时)。
那么如何允许用户通过再次单击来取消选择该行呢?在这种情况下,不会调用常规委托方法(如-tableView:shouldSelectRow:
),因此您无法通过这种方式捕获对已选择行的点击。
默认情况下,NSTableView 允许用户通过单击表格视图空白区域的任意位置来清除行选择。然而,这并不总是直观的,有时甚至是不可能的(例如,当表格视图本身实际上没有任何空白区域时)。
那么如何允许用户通过再次单击来取消选择该行呢?在这种情况下,不会调用常规委托方法(如-tableView:shouldSelectRow:
),因此您无法通过这种方式捕获对已选择行的点击。
你想定义你自己的 NSTableView 子类并-mouseDown:
像这样设置:
- (void)mouseDown:(NSEvent *)theEvent {
NSPoint globalLocation = [theEvent locationInWindow];
NSPoint localLocation = [self convertPoint:globalLocation fromView:nil];
NSInteger clickedRow = [self rowAtPoint:localLocation];
BOOL wasPreselected = (self.selectedRow == clickedRow);
[super mouseDown:theEvent];
if (wasPreselected)
[self deselectRow:self.selectedRow];
}