我通过Interface Builder创建了一个NSMenu。其中一个名为showPreferencesPanel方法的菜单项,在KBAppController.m中定义:
-(void)showPreferencesPanel {
//something
}
现在,我必须以编程方式重新构建没有IB的菜单。 StatusMenu.m是处理所有这些的类,我无法弄清楚我应该设置的目标,以便从另一个类调用一个方法。
创建该类的实例不起作用!菜单项显示为灰色。
StatusMenu.m
KBAppController *kbAppController = [[KBAppController alloc]init];
NSMenuItem* preferencesItem;
[preferencesItem setTarget:kbAppController];
preferencesItem = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(showPreferencesPanel) keyEquivalent:@""];
编辑:------------------------------------------ -
以下是使用类KBAppController对象的更新代码。好消息是prefs菜单项已启用,但它仍然没有调用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
}
答案 0 :(得分:1)
NSMenuItem有一个- (void)setTarget:(id)anObject
和- (void)setAction:(SEL)aSelector
应该可以做到这一点。
请确保先设置并初始化NSMenuItem。现在你在未初始化的对象上调用-setAction
。
preferencesItem = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(showPreferencesPanel) keyEquivalent:@""];
[preferencesItem setTarget:kbAppController]
答案 1 :(得分:0)
让selector
从您的班级调用该方法。在该方法中,使用showPreferencePanel()
对象调用KBAPPController
。
确保将KBAppController的对象设置为StatusMenu的属性。