2

二次クリックを受け入れるように NSOutlineView を取得しようとしていますが、理解できないようです。セカンダリ クリックを 2 本の指からトラックパッドの右隅と左隅に変更しようとしましたが、マウスダウン イベントのアウトライン ビューで応答がありません。誰でも私を助けることができますか?

アップデート:

これを使用すると、2 回目のクリックがログに記録されますが、rightMouseDown: 関数にはまだ表示されません。

[NSEvent addLocalMonitorForEventsMatchingMask:NSRightMouseDownMask handler:^(NSEvent* event) {
    NSLog(@"%@", event);
    return (NSEvent *)event;

}];

アップデート:

これを解決する方法はまだわかりません。私の NSCollectionView は rightMouseUp には応答しますが、rightMouseDown には応答しません。どうして?

tnx

4

2 に答える 2

0

Apple のドキュメントでは、rightMouseDown がレスポンダー チェーンの上位 (コンテキスト メニュー用) で処理されることについて具体的に述べており、具体的にはサブクラスに渡されません。ドキュメントでは、acceptsFirstResponder のオーバーライドについて説明していますが、それを機能させることもできませんでした。

したがって、rightMouseDown イベントを発生させることはできませんでしたが、コードを変更して偽装することはできました。イベントをログに記録する代わりに、代わりに rightMouseDown イベント ハンドラーを呼び出します。

[NSEvent addLocalMonitorForEventsMatchingMask:NSRightMouseDownMask handler:^(NSEvent* event) {
        [self rightMouseDown:event];
        return (NSEvent *)event;
    }];

願わくば、誰かがこれよりもこの問題に光を当ててくれることを願っていますが、少なくともこれは始まりです。

于 2013-11-19T03:59:36.610 に答える
0

mouseDown をオーバーライドするときに同様の問題が発生しました: どちらの場合も同じ動作をさせるには、 mouseDown から rightMouseDown: を呼び出す必要がありました。これはマーベリックスでは機能しなくなりました。

代わりに、これを行う必要がある場合は、イベント タイプをマウスの右クリックに変更する方がよいようです。多分これはあなたを助けるでしょう:

- (void)mouseDown:(NSEvent *)event;
{
    [event setValue:@(NSRightMouseDown) forKey:@"type"];
    [self rightMouseDown:event];
}
于 2013-11-22T18:52:49.287 に答える