1

ここで明らかな何かが欠けているように感じますが、ハイライトがソースリストに設定され、空の選択が有効になっている NSTableView がある場合、テーブルの空白行をクリックしてクリアすることができないようです選択。

ハイライトを通常に変更すると問題は解決しますが、もちろん、思いどおりに描画されません。

テーブルにはバインディングがなく、カスタム データ ソースが使用されます。この制限を回避する方法はありますか?

4

2 に答える 2

1

これを達成するためにターゲットアクションを使用できます。初期化中に次のことを行います。

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];
    }
}
于 2012-07-22T03:15:10.027 に答える
1

今のところ、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];
        }
    }
}
于 2012-06-28T00:56:22.837 に答える