mac状态栏应用程序无法正常工作

时间:2014-02-20 01:21:36

标签: objective-c macos cocoa

我正在关注这个:http://lepture.com/en/2012/create-a-statusbar-app简单的教程,让基于状态栏的Mac应用程序工作,我也引用了Apple的NSStatusItem类引用 - 并且无法弄清楚我做错了什么?

它只是不起作用。我的项目使用ARC。

这是FPAppDelete.h:

#import <Cocoa/Cocoa.h>

@interface FPAppDelegate : NSObject <NSApplicationDelegate>

@property (weak) IBOutlet NSMenu *statusMenu;
@property (strong, nonatomic) NSStatusItem *statusBar;

@end

这是FPAppDelegate.m:

#import "FPAppDelegate.h"

@implementation FPAppDelegate
@synthesize statusBar = _statusBar;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}

- (void) awakeFromNib {
    self.statusBar = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];

    self.statusBar.title = @"G";

    self.statusBar.menu = self.statusMenu;
    self.statusBar.highlightMode = YES;
}

@end

我根本不期待这个,但是当我运行应用程序时,我得到了这个,我的状态栏中没有任何内容

2 个答案:

答案 0 :(得分:2)

看起来你愿意听。因此,我将快速向您展示如何运行状态应用程序。

(1)将NSMenu添加到侧栏(或任何你打电话)。 (请参阅下面的屏幕截图。)您可以保留或删除3个通用菜单项。

enter image description here

(2)在AppDelegate.h下添加以下实例变量。

@interface AppDelegate : NSObject <NSApplicationDelegate> {
    IBOutlet NSMenu *statusMenu;
    NSStatusItem *statusItem;
    NSImage *statusImage;
}

@property (assign) IBOutlet NSWindow *window;
@property (strong) NSMenuItem *menuItem1; // show application

我还会添加一个属性作为示例。

以下代码适用于AppDelegate.m

@implementation AppDelegate
@synthesize menuItem1;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [self setMainStatus];
}

- (void)setMainStatus {    
    statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    statusImage = [NSImage imageNamed:@"statusImage"];
    [statusItem setImage:statusImage];
    [statusItem setMenu:statusMenu];

    NSMutableString *menuname1 = [[NSMutableString alloc] initWithString:NSLocalizedString(@"statusMenuShowApplication", @"Show Application Window")];
    menuItem1 = [[NSMenuItem alloc] initWithTitle:menuname1 action:@selector(statusApplicatinClicked:) keyEquivalent:@""];
    [statusMenu addItem:menuItem1];
}

- (void)statusApplicatinClicked:(id)sender {
    [self.window setIsVisible:YES]; 
}

@end

(3)返回Interface Builder并将状态菜单连接到您添加的NSMenu控件。

setMainStatus方法(或任何您想要命名的方法)以编程方式将菜单项添加到状态菜单。首先,您需要创建NSStatusbar,它采用NSImage。此NSImage用于在状态菜单上显示图标。接下来,将菜单项和分隔符添加到状态菜单(在我的情况下为状态菜单)。我将menuItem1作为属性,以便应用程序可以启用/禁用它。这只是一个简单的例子。您可以将NSView添加到状态菜单。如果要添加分隔符,可以如下所示。

 [statusMenu addItem:[NSMenuItem separatorItem]];

您不需要应用程序窗口来运行状态菜单应用程序。如果您要将状态应用程序提交到Apple的Mac App Store,则必须首次显示主应用程序窗口。

答案 1 :(得分:0)

状态栏是整个屏幕的右上角。这是日期和时间,Spotlight等在菜单栏中的位置。

您发布的屏幕截图是主NSWindow标题栏