2013-03-03 26 views
3

我面临一个奇怪的情况。我有一个NSMenu与其中的子菜单。子菜单的内容以编程方式填充。在我的validateMenuItem:方法中,我可以看到所有正在检查的项目(父项目)以及子项目(一旦我点击子菜单),除了我的自动填充子菜单中的项目。validateMenuItem:不叫

这是为什么?难道我做错了什么?任何想法如何解决这个问题?

+0

这些菜单项正常运行,否则(即当你选择他们,他们触发他们的行动方法)? – trojanfoe 2013-03-03 10:27:43

+0

@trojanfoe刚刚找到了答案(很简单,说实话...) - 我现在就发布它。 – 2013-03-03 10:30:29

+0

@trojanfoe所有菜单项的操作都是在控制器中实现的,而一个特定的子菜单的子项操作不是。因此,'validateMenuItem:'方法不被调用。 (令人沮丧的...因为我在发帖前2小时还在努力挣扎(然后在10分钟后自己回答...大声笑)) – 2013-03-03 10:35:27

回答

11

下面是解:

可可查找在其中NSMenuItem的动作选择器是类的validateMenuItem:方法。

因此,如果您NSMenuItem的动作选择(例如@selector(someSelector:))在SomeClass实现,那么请确保您有一个SomeClass方法validateMenuItem:也一样,如果你想验证相应的菜单项。

+1

你不是以你的行动为目标* First Responder *吗? – trojanfoe 2013-03-03 10:35:30

+0

@trojanfoe不,我不是。所有操作都链接到特定的类。我应该瞄准第一响应者吗? – 2013-03-03 10:36:40

+0

我想这取决于应用程序,但在我的基于文档的应用程序中,我的所有菜单都以* First Responder *为目标。 – trojanfoe 2013-03-03 10:37:27