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

Objective c 如何在NSTextField(Cocoa)中使用鼠标右键单击禁用上下文菜单?,objective-c,macos,cocoa,contextmenu,nstextfield,Objective C,Macos,Cocoa,Contextmenu,Nstextfield,我正在开发一个具有可编辑文本字段的Cocoa应用程序。这些文本字段需要接受值,但不需要进行拼写检查或使用默认上下文菜单中提供的任何其他选项。我已经了解到,删除右键单击/opt+单击上下文菜单的最简单方法是覆盖该函数: rightMouseDown:(NSEvent *) 我在一个定制的NSTextfield类中完成了这项工作。此修复程序阻止用户在启用和取消选择文本框时单击鼠标右键,但只要用户双击/输入用于编辑默认右键单击功能的文本字段,就会返回 这是因为第一响应程序在尝试编辑字段时切换到继承

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

rightMouseDown:(NSEvent *) 
我在一个定制的NSTextfield类中完成了这项工作。此修复程序阻止用户在启用和取消选择文本框时单击鼠标右键,但只要用户双击/输入用于编辑默认右键单击功能的文本字段,就会返回

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


谢谢

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

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