使用鼠标切换TableView单元格的选定状态

时间:2013-10-16 00:11:32

标签: objective-c cocoa nstableview nsevent

默认情况下,NSTableView允许用户通过单击表视图的空白区域中的任意位置来清除行选择。然而,这并不总是直观的,有时甚至是不可能的(例如,当表视图本身实际上没有任何空白区域时)。

那么如何让用户再次单击它来取消选择该行?在这种情况下,不会调用常规委托方法(例如-tableView:shouldSelectRow:),因此您无法以这种方式捕获已选择的行上的单击。

1 个答案:

答案 0 :(得分:3)

您想要定义自己的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];

}