如何在NSTextField(Cocoa)中单击鼠标右键来禁用上下文菜单?

bha*_*ley 2 macos cocoa contextmenu objective-c nstextfield

我正在开发一个具有可编辑文本字段的Cocoa应用程序.这些文本字段需要接受值,但不需要进行拼写检查或使用默认上下文菜单中给出的任何其他选项.我已经读过删除右键单击/ opt +单击上下文菜单的最简单方法是覆盖该功能:

rightMouseDown:(NSEvent *) 
Run Code Online (Sandbox Code Playgroud)

我在自定义的NSTextfield类中完成了这个.启用和取消选中文本框时,此修复程序会阻止用户右键单击,但只要用户双击/输入文本字段进行编辑,就会返回默认的右键单击功能.

这是因为firstResponder在尝试编辑字段时切换到继承链中的类吗?这种方法是禁用此NSTextField的所有上下文菜单功能的正确方法吗?

谢谢!

Ken*_*ses 5

当正在编辑文本字段时,实际的第一响应者是NSTextView由窗口提供的"字段编辑器" .字段编辑器始终使用代表其作为其委托的控件.

因此,为了影响其相对于上下文菜单的行为,您需要使用自定义子类NSTextField.(我猜你已经要覆盖了-rightMouseDown:.)然后,实现文本视图委托方法-textView:menu:forEvent:atIndex:并返回nil(即没有菜单).