gpt4 book ai didi

objective-c - NSCollectionView 不弹出上下文菜单?

转载 作者:太空狗 更新时间:2023-10-30 03:26:44 25 4
gpt4 key购买 nike

我已将菜单绑定(bind)到界面生成器中的 NSCollectionView。但是当我按住 CTRL 并单击(右键单击)时,菜单没有显示。

我已经尝试向 NSCollectionView 子类添加一些方法。它们都没有被调用:

+ (NSMenu*)defaultMenu
- (NSMenu *)menuForEvent:(NSEvent *)theEvent
- (void)rightMouseDown:(NSEvent *)theEvent
- (void)sendEvent:(NSEvent *)theEvent

唯一被调用的方法是:

- (NSView *)hitTest:(NSPoint)aPoint

这意味着 NSCollectionView 接收到鼠标事件。

我也尝试将相同的方法添加到 NSCollectionViewItem 的子类中,结果是一样的。只有 hitTest: 被调用。

最佳答案

"new"NSCollectionView 也有同样的问题。上下文菜单是在 xib 中设置的,它实际上是由鼠标右键单击以及触控板上的双指选项卡正确触发的(如果用户在系统偏好设置中设置了该选项),但不是通过控制点击。因此,这似乎是 NSCollectionView 的合法错误或限制,可能取决于它的设置方式。

无论如何,这是一个更短的解决方案,这个是 Swift 中的解决方案,它假设您已经使用 Collection View 的 menu socket 设置了上下文菜单(或者您已经设置了它如 Apple's documentation 中所述)。

您需要创建 NSCollectionView 的子类,并在 xib 中为 Collection View 选择子类。这是子类的代码:

import Cocoa

class MyCollectionView: NSCollectionView {

/// Fixes the behavior of collection view with control-click, that does not properly trigger the contextual menu.
override func mouseDown(with event: NSEvent) {
super.mouseDown(with: event)
if event.type == .rightMouseDown || event.modifierFlags.contains(.control) {
rightMouseDown(with: event)
}
}

}

关于objective-c - NSCollectionView 不弹出上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35336615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com