可可 - 如何设置状态栏应用程序左键单击事件?

时间:2016-03-21 12:54:38

标签: objective-c macos cocoa

我是Objective-c编程的新手,我现在正试图制作状态栏应用程序。

我只知道在点击状态栏项目时如何设置下拉菜单。

但是,我想要的是在左键单击时显示panel并在右键单击时显示menu,就像Bartender 2的行为一样。

我已经提到了demo,但我几乎无法弄清楚它的作用。

我使用xib来构建我的UI。我有三个.xib个文件:MainMenuPreferencesMainPanel

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]; 但这不对。

1 个答案:

答案 0 :(得分:0)

有关在给定NSMenu处绘制NSPoint的信息,请参阅this帖子(使用popUpContextMenu:withEvent:forView:代替showWindow)。

我还要指出,在你链接的例子中,作者按照MVC模式将他的项目模块化为不同的组件。菜单控制器和视图有一个组件(它看起来不像是只显示NSMenu),还有面板控制器和视图。您可能想要考虑如何组织项目以遵循MVC的约定。