作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通过 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 类的对象的更新代码。好消息是首选项菜单项已启用,但它仍然没有调用 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
}
最佳答案
NSMenuItem 有一个 - (void)setTarget:(id)anObject
和 - (void)setAction:(SEL)aSelector
应该可以做到这一点。
只需确保首先设置并初始化 NSMenuItem。现在您正在对未初始化的对象调用 -setAction
。
preferencesItem = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(showPreferencesPanel) keyEquivalent:@""];
[preferencesItem setTarget:kbAppController]
关于objective-c - @selector - 如何从另一个类调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12099796/
我是一名优秀的程序员,十分优秀!