0

这是我的示例类和用法:

@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。

我在这里有什么遗漏吗?

4

2 回答 2

1

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

顺便说一句,menuZone是为了NSMenu,而不是NSMenuItem

于 2013-05-08T17:22:47.963 回答
0

为了调用validateMenuItem:,因为它是 的委托方法NSMenuDelegate
您必须执行以下操作:

@interface CCocoaMenuItem : NSMenuItem <NSMenuDelegate>{
   someClass *someobj;
}
于 2013-07-22T10:03:36.970 回答