Edw*_*rdr 7 cocoa interface-builder nsstatusitem nsmenuitem ibaction
我正在进行一些初步的Cocoa编程,我遇到了一些真正的困难.
从本质上讲,我有一个NSStatusBar与项目NSMenu相连的菜单.菜单有一个NMMenuItem.在IB中,我将NSMenuItem连接到一个NSObject本身设置为ApplicationDelegate类的NSMenuItem ; 然后,我将Received Actions设置IBAction为ApplicationDelegate中的方法.我认为一切都正确连接,除非我运行程序并单击菜单项时IBAction不调用该方法.我真的无法解决这个问题.这是相关的代码.
应用程序委托h文件:
#import <Cocoa/Cocoa.h>
@interface sssAppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSMenu *statusMenu;
NSStatusItem *statusItem;
}
- (IBAction)showPreferencePanel:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)
应用程序委托m文件:
#import "sssAppDelegate.h"
@implementation sssAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
-(void)awakeFromNib{
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
[statusItem setMenu:statusMenu];
[statusItem setTitle:@"Status"];
[statusItem setHighlightMode:YES];
}
- (IBAction)showPreferencePanel:(id)sender {
NSLog(@"Hello World!");
}
@end
Run Code Online (Sandbox Code Playgroud)
正如我所说,在IB我已经连接NSMenu到statusMenu的应用程序委托(因此菜单下的所有显示出来NSStatusBar),和我连接了NSMenuItem内NSMenu到NSObject与应用程序委托类,并迷上它叫showPreferencePanel,但我跑的时候什么都没发生!
我也以编程方式尝试了它,但仍然无法调用IBAction方法.
编辑:我会附上一些屏幕抓取来显示IB中的设置,但我还没有被允许.
主要的笔尖包含添加到的菜单NSStatusBar,它看起来像这样:
NSApplicationFirstResponderNSApplicationNSFontManagerNSMenu
NSMenuItemsssAppDelegateNSMenuItem:
showPreferencePanel--->Sss App DelegateSss App代表:
statusMenu--->Main MenushowPreferencePanel:--->Main Item (Preferences)以编程方式,您是否尝试过:
[statusItem setTarget:someTarget];
[statusItem setAction:@selector(someSelector)];
Run Code Online (Sandbox Code Playgroud)
它应该有效。