我试图让NSOutlineView接受二次点击,但似乎无法弄清楚。我试过将二次点击从两根手指改为触控板的左右角,但在我的大纲视图中,鼠标按下事件仍然没有任何响应。有人能帮我吗?
更新:如果我使用这个,第二次点击被记录,但它仍然没有显示在rightMouseDown:函数。
[NSEvent addLocalMonitorForEventsMatchingMask:NSRightMouseDownMask handler:^(NSEvent* event) {
NSLog(@"%@", event);
return (NSEvent *)event;
}];
更新:我仍然不知道如何解决这个问题。我的NSCollectionView响应rightMouseUp而不是rightMouseDown。怎么会?tnx
apple文档特别提到了rightMouseDown在responder chain(对于上下文菜单)中被处理,并且它不会被传递到一个人的子类中。文档中谈到了重写acceptsFirstResponder,但我也没能让它工作。
所以,虽然我不能得到rightMouseDown事件触发,我能够修改你的代码来伪造它。而不是记录事件,我让它调用我的rightMouseDown事件处理程序来代替。
[NSEvent addLocalMonitorForEventsMatchingMask:NSRightMouseDownMask handler:^(NSEvent* event) {
[self rightMouseDown:event];
return (NSEvent *)event;
}];
希望有人能对这个问题提出比这更好的看法,但至少这是一个开始。
在重写mouseDown时遇到类似的问题:我需要调用rightMouseDown: from mouseDown以在两种情况下具有相同的行为。
相反,似乎最好将事件类型更改为右键单击时,你需要这发生。也许这对你有帮助:
- (void)mouseDown:(NSEvent *)event;
{
[event setValue:@(NSRightMouseDown) forKey:@"type"];
[self rightMouseDown:event];
}