回答
“Enabling Menu Items” in Application Menu and Pop-up List Programming Topics这样说:
默认情况下,在用户每次事件发生时,会自动
NSMenu
启用和禁用每个可见菜单项的时间。您也可以使用NSMenu
的update
方法强制更新菜单。
这:
如果菜单项的目标不能被设置(即,如果它是
nil
- 通常,如果菜单项连接到急救员)和NSMenu
对象不是上下文菜单,则NSMenu
使用响应者链(在Cocoa Event Handling Guide中的“The Responder Chain”中描述)来确定目标。如果在实施该项目的动作的响应者链中没有对象,则该项目被禁用。 如果响应者链中有一个实现项目动作的对象,则NSMenu
将检查该对象是否实现validateMenuItem:
或validateUserInterfaceItem:
方法。如果没有,则菜单项被启用。如果是,则菜单项的启用状态由方法的返回值确定。
默认情况下(当您创建使用“Cocoa应用程序”模板的项目),复制菜单项的目标是急救员(nil
)和动作是copy:
。因此,您需要在响应者链中的某个项目上实施copy:
方法。这足以启用菜单项。如果您想更精确地控制启用菜单项的时间,则还可以执行validateMenuItem:
以检查哪个菜单项正在验证,并根据情况返回YES
或NO
。
例如,应用程序委托位于响应者链中。所以,你可以将这个方法添加到CMAppDelegate
:
- (IBAction)copy:(id)sender {
NSLog(@"%@ %s", self, __func__);
}
这应该足以使复印菜单项。当然,选择编辑>复制只会将消息记录到控制台。实际编写复制用户所选内容的代码由您决定。
如果你想更精细的控制,尝试给应用程序的委托连接到复印菜单项的出口:
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (strong) IBOutlet NSMenuItem *copyMenuItem;
@end
胡克出口处MainMenu.xib
。那么你可以这样实现validateMenuItem:
:
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
if (menuItem == self.copyMenuItem) {
NSLog(@"%@ %s %@", self, __func__, menuItem);
return [self shouldEnableCopyMenuItem];
}
return NO;
}
- 1. 如何启用asp.net中的菜单项
- 2. 如何启用EditText中的“复制粘贴”菜单?
- 3. 启用/禁用菜单项
- 4. 如何制作功能主菜单?
- 5. Action Bar菜单项复制运行
- 6. 在Wordpress 3中启用菜单主题
- 7. PyCharm重复的主菜单
- 8. Controllling Drupal的主动/主动-TRAIL重复的菜单项
- 9. MVC3 _Layout.cshtml ...禁用/启用菜单项
- 10. 如何在Android自定义主题中启用菜单?
- 11. 如何为PopupWindow制作选项菜单?
- 12. 如何制作动态选项菜单?
- 13. 制作动画主菜单
- 14. 的Joomla主菜单定制
- 15. 'Embed Objects In'菜单项全部禁用。如何启用?
- 16. 复制菜单项,每次它在打开溢出选项菜单
- 17. 菜单项已启用,但仍灰显
- 18. 更新Eclipse菜单项启用状态
- 19. 重新使用主菜单项作为弹出菜单
- 20. 用于主菜单的AngularJS控制器
- 21. Eclipse-如何从文件菜单启用此类选项?
- 22. 如何禁用单个菜单项?
- 23. 如何启用功能区菜单?
- 24. 如何从弹出菜单启用editText?
- 25. 从标签复制菜单
- 26. 如何制作macOS应用程序有两个主菜单
- 27. 如何使用Secondary Menu的Drupal 6控制主菜单链接?
- 28. MySQL复制简单的主/从复制
- 29. WordPress的CSS菜单复制 - 菜单项和下拉菜单中的项目右移
- 30. 复选框菜单项不起作用
谢谢!它的帮助! – Kepler 2013-04-05 20:04:21