我正在关注这个: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
我根本不期待这个,但是当我运行应用程序时,我得到了这个,我的状态栏中没有任何内容
答案 0 :(得分:2)
看起来你愿意听。因此,我将快速向您展示如何运行状态应用程序。
(1)将NSMenu添加到侧栏(或任何你打电话)。 (请参阅下面的屏幕截图。)您可以保留或删除3个通用菜单项。
(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
的标题栏。