不会为NSMenuItem调用ValidateMenuItem

时间:2013-05-08 15:25:46

标签: cocoa nsmenuitem nsmenu

以下是我的示例类和用法:

@interface CCocoaMenuItem : NSMenuItem 
{
   someClass *someobj;
}

 - (void)menuEventHandler:(id)target;
- (void)setEnableItem:(BOOL)nEnabled;

@end

@implementation CCocoaMenuItem

- (BOOL)validateMenuItem:(NSMenuItem *)item {
    // return YES or NO based on some conditions;
// But this method is not getting called


}

@end
 CCocoaMenuItem *dummyItem = [[CCocoaMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:(NSString*)aStr action:nil keyEquivalent:@""] autorelease];
[dummyItem setAction:@selector(menuEventHandler:)];
[dummyItem setTarget:dummyItem];

这里validateMenuItem没有被调用。我已经设定了行动和目标。 Target是这个类对象本身,我只在这个类中定义了validatemenuItem。

这里有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

在您发布的代码中,CCocoaMenuItem仅在menuEventHandler:中声明@interface方法,但实际上并未实现它。如果菜单项的目标没有响应您设置为action的选择器(此类菜单项会自动禁用),则不会验证菜单项。

顺便说一下,menuZone适用于NSMenu,而非NSMenuItem

答案 1 :(得分:0)

要致电validateMenuItem:,因为它是NSMenuDelegate的委托方法,
你必须做这样的事情:

@interface CCocoaMenuItem : NSMenuItem <NSMenuDelegate>{
   someClass *someobj;
}