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

标签 objective-c macos cocoa contextmenu nstextfield

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

rightMouseDown:(NSEvent *) 

我已经在自定义 NSTextfield 类中完成了此操作。当启用并取消选择文本框时,此修复会阻止用户右键单击,但一旦用户双击/输入文本字段进行编辑,默认右键单击功能就会返回。

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

谢谢!

最佳答案

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

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

关于objective-c - 如何在 NSTextField (Cocoa) 中单击鼠标右键来禁用上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26518860/

相关文章:

css - "There is no no-color option ("少 --help "for help)"少

iphone - 为 iphone HTTP API 添加自定义证书

objective-c - 苹果机 : Display hierarchical lists of data plus detail view (similar to UINavigationController + UITableViewController)

objective-c - 根据另一个 NSArray 字符串的排序对自定义对象的 NSArray 进行排序

ios - 从一个 View Controller 传递字符串并将其显示在 ios 的 UITextView 中

macos - OSX Dropbox Sync API 错误 - 无法验证链接请求

objective-c - 裁剪图像时添加细白线 (Objective-C OSX)

objective-c - 在数组上使用 KVC 的 @count 会引发数组中的类的异常

ios - 在 objective-c 中找到重力

c++ - iOS 平台上的 TCP 方法