4

デフォルトでは、NSTableView を使用すると、ユーザーはテーブル ビューの空白領域をクリックして行の選択をクリアできます。ただし、これは常に直感的であるとは限らず、不可能な場合もあります (たとえば、テーブル ビューの内部に実際に空の領域がない場合)。

では、ユーザーが行をもう一度クリックするだけで行の選択を解除できるようにするにはどうすればよいでしょうか? この場合、通常のデリゲート メソッド ( など-tableView:shouldSelectRow:) は呼び出されないため、このように既に選択されている行のクリックをキャプチャすることはできません。

4

1 に答える 1

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];

}
于 2013-10-16T00:11:32.417 に答える