我是Objective-c编程的新手,我现在正试图制作状态栏应用程序。
我只知道在点击状态栏项目时如何设置下拉菜单。
但是,我想要的是在左键单击时显示panel
并在右键单击时显示menu
,就像Bartender 2
的行为一样。
我已经提到了demo,但我几乎无法弄清楚它的作用。
我使用xib
来构建我的UI。我有三个.xib
个文件:MainMenu
,Preferences
和MainPanel
。
AppDelegate.h
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property NSStatusItem *statusItem;
@end
AppDelegate.m
#import "AppDelegate.h"
#import "Menu.h" //Menu is a ViewController for Menu.xib
@interface AppDelegate ()
//@property (weak) IBOutlet NSWindow *window; //I don't know what is this for
@end
@implementation AppDelegate
@synthesize statusItem;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
}
//I initiate my statusItem here
-(void)awakeFromNib{
self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
self.statusItem.title = @"T";
// you can also set an image
//self.statusBar.image =
self.statusItem.highlightMode = YES;
//I tried to use these code to set the left click action
[statusItem setTarget:self];
[statusItem setAction:@selector(showMenu:)];
}
-(void)showMenu{
Menu* menuVC = [[Menu alloc] initWithNibName:@"Menu" bundle:nil];
//Don't know what to do next...
}
@end
我试过用
[menuVC showWindow];
但这不对。
答案 0 :(得分:0)
有关在给定NSMenu
处绘制NSPoint
的信息,请参阅this帖子(使用popUpContextMenu:withEvent:forView:
代替showWindow
)。
我还要指出,在你链接的例子中,作者按照MVC模式将他的项目模块化为不同的组件。菜单控制器和视图有一个组件(它看起来不像是只显示NSMenu
),还有面板控制器和视图。您可能想要考虑如何组织项目以遵循MVC的约定。