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

时间:2014-10-22 23:28:02

标签: objective-c macos cocoa contextmenu nstextfield

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

rightMouseDown:(NSEvent *) 

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

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

谢谢!

1 个答案:

答案 0 :(得分:5)

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

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