这是我的示例类和用法:
@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 没有被调用。我已经设定了行动和目标。目标是此类对象本身,我仅在此类中定义了 validatemenuItem。
我在这里缺少什么吗?
最佳答案
在您发布的代码中,CCocoaMenuItem
仅在 @interface
中声明了 menuEventHandler:
方法,但并未实际实现它。如果菜单项的目标不响应您设置为操作
的选择器,则不会验证菜单项(此类菜单项会自动禁用)。
顺便说一句,menuZone
适用于 NSMenu
,而不是 NSMenuItem
。
关于cocoa - NSMenuItem 没有调用 ValidateMenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16444506/