在 ObjC 中禁用剪切和/或粘贴
Posted
技术标签:
【中文标题】在 ObjC 中禁用剪切和/或粘贴【英文标题】:Disable cut and/or paste in ObjC 【发布时间】:2011-07-07 22:33:51 【问题描述】:我想在我的 ObjC 应用程序中禁用运行时菜单栏中的剪切和/或粘贴功能。我知道这在 ios 中是可能的 -(BOOL)canPerformAction:(SEL)aSelector withSender:(id)sender
MacOS 有什么类似的吗?
谢谢
【问题讨论】:
【参考方案1】:有NSUserInterfaceValidations Protocol,一个用于验证项目的通用协议。您只需实现 validateUserInterfaceItem:
方法并返回 NO 即可禁用该操作。
- (BOOL)validateUserInterfaceItem:(id < NSValidatedUserInterfaceItem >)anItem
if([anItem action] == @selector(cut:) ||
[anItem action] == @selector(copy:) ||
[anItem action] == @selector(paste:)) return NO;
return [self respondsToSelector:[anItem action]];
还有一个NSMenuValidation Protocol,它执行相同的功能但仅用于验证菜单项,而不是所有界面项。如果您不实施,系统将转而使用标准验证。
【讨论】:
请问,这段代码应该放在哪里?在应用程序委托中?我从来没有使用过这个协议,所以我不知道从哪里开始。我是否必须以某种方式将菜单项“连接”到它?谢谢 它们应该被放置在任何接受动作的地方。这通常是包含数据的控件,例如文本视图,但也可以是文档或窗口控制器。如果您打算始终禁用它们,则可以将目标更改为其他对象,这样您只需将方法添加到一个对象。 首先,感谢您的光临。第二:假设我希望剪切/粘贴始终以标准方式运行,但是当我的 NSImageView 是第一响应者时。我知道我可以使 NSImageView 根本不可编辑,但我需要让它可编辑并完全控制剪切/粘贴的状态(启用/禁用)。我已经尝试将该代码放在我的 NSImageView 的子类实现中,但它似乎不起作用......我错在哪里? 也许 NSImageView 实现了NSMenuValidation
,覆盖了你的方法。但是,NSImageView 也有一个setAllowsCutCopyPaste:
方法。对于这种情况,您只需致电 [myImageView setAllowsCutCopyPaste:NO]
。
正如我之前所说,我知道这种方法,但这不是我想要的,因为 ti 禁用/启用剪切、复制和粘贴,但我需要保持复制启用.. . 我要生气了...以上是关于在 ObjC 中禁用剪切和/或粘贴的主要内容,如果未能解决你的问题,请参考以下文章