2

我通过 Interface Builder 创建了一个 NSMenu。菜单项之一称为 showPreferencesPanel 方法,在 KBAppController.m 中定义:

-(void)showPreferencesPanel {
    //something
}

现在,我必须在没有 IB 的情况下重新构建菜单......全部以编程方式。StatusMenu.m 是处理所有这些的类,我无法确定应该设置的目标,以便从另一个类调用方法。

创建该类的实例不起作用!菜单项显示为灰色。

状态菜单.m

KBAppController *kbAppController = [[KBAppController alloc]init];
NSMenuItem* preferencesItem;
[preferencesItem setTarget:kbAppController];
preferencesItem = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(showPreferencesPanel) keyEquivalent:@""];

编辑:--------------------------------------------------------

这是使用 KBAppController 类对象的更新代码。好消息是启用了首选项菜单项,但它仍然没有调用 KBAppController.m 中的方法:(

KBStatusMenu.m

@synthesize kbAppController = _kbAppController;

someMethod {   
NSMenuItem* preferencesItem;
preferencesItem = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(showPreferencesPanel) keyEquivalent:@""];
[preferencesItem setTarget:self];
}

- (void)showPreferencesPanel {
NSLog(@"in 1");
[_kbAppController showPreferencesPanel];
}

KBAppController.m

-(void)showPreferencesPanel {
    NSLog(@"in 2");
    //something
}
4

2 回答 2

1

NSMenuItem 有一个- (void)setTarget:(id)anObject并且- (void)setAction:(SEL)aSelector应该可以做到这一点。

只需确保首先设置并初始化 NSMenuItem。现在你正在调用-setAction一个未初始化的对象。

preferencesItem = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(showPreferencesPanel) keyEquivalent:@""];
[preferencesItem setTarget:kbAppController]
于 2012-08-23T20:55:14.433 回答
0

从你selector的班级调用方法。在该方法中,showPreferencePanel()使用KBAPPController.

确保将 KBAppController 的对象设置为 StatusMenu 的属性。

于 2012-08-23T20:55:16.870 回答