我正在进行一些初步的Cocoa编程时遇到一些真正的困难。
基本上,我有一个NSStatusBar
项目附加NSMenu
作为菜单。菜单只有一个NMMenuItem
。在IB中,我已将NSMenuItem连接到NSObject
,IBAction
本身设置为ApplicationDelegate的类;然后,我将Received Actions设置为ApplicationDelegate中的IBAction
方法。我认为一切都正确连接,除非我运行程序并单击菜单项时未调用#import <Cocoa/Cocoa.h>
@interface sssAppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSMenu *statusMenu;
NSStatusItem *statusItem;
}
- (IBAction)showPreferencePanel:(id)sender;
@end
方法。我真的无法解决这个问题。这是相关的代码。
Application Delegate h file:
#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
Application Delegate m file:
NSMenu
正如我所说,在IB中,我已将statusMenu
连接到应用程序代理中的NSStatusBar
(因此菜单全部显示在NSMenuItem
下),并且我已连接{使用Application Delegate类在NSMenu
到NSObject
内{1}},并将其连接到调用showPreferencePanel,但是当我运行它时没有任何反应!
我也以编程方式尝试过,但仍然无法调用IBAction方法。
编辑:我会附上一些屏幕抓取来显示IB中的设置,但我还没有被允许。
主要的笔尖包含添加到NSStatusBar
的菜单,它看起来像这样:
NSApplication
FirstResponder
NSApplication
NSFontManager
NSMenu
NSMenuItem
sssAppDelegate
NSMenuItem:
showPreferencePanel
---&gt; Sss App Delegate
Sss App代表:
statusMenu
---&gt; Main Menu
showPreferencePanel:
---&gt; Main Item (Preferences)
答案 0 :(得分:2)
以编程方式,您尝试过:
[statusItem setTarget:someTarget];
[statusItem setAction:@selector(someSelector)];
它应该有用。