Objective c mac状态栏应用程序不工作
我遵循这个:简单的教程,让一个基于状态栏的Mac应用程序工作,我也引用了苹果的NSStatusItem类引用-但我不知道我做错了什么 它只是不起作用。我的项目使用ARC 以下是FPAppDelete.h:Objective c mac状态栏应用程序不工作,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我遵循这个:简单的教程,让一个基于状态栏的Mac应用程序工作,我也引用了苹果的NSStatusItem类引用-但我不知道我做错了什么 它只是不起作用。我的项目使用ARC 以下是FPAppDelete.h: #import <Cocoa/Cocoa.h> @interface FPAppDelegate : NSObject <NSApplicationDelegate> @property (weak) IBOutlet NSMenu *statusMenu; @pr
#import <Cocoa/Cocoa.h>
@interface FPAppDelegate : NSObject <NSApplicationDelegate>
@property (weak) IBOutlet NSMenu *statusMenu;
@property (strong, nonatomic) NSStatusItem *statusBar;
@end
我一点也不希望出现这种情况,但当我运行应用程序时,我得到了这种情况,状态栏中没有任何内容状态栏是整个屏幕的右上部分。它是日期和时间、聚光灯等在菜单栏中显示的位置
您发布的屏幕截图位于主
NSWindow
的标题栏上,看起来您很乐意倾听。因此,我将快速向您展示如何运行状态应用程序
(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
(3) 返回Interface Builder并将状态菜单连接到已添加的NSMenu控件
setMainStatus方法(或任何您想要命名的方法)以编程方式将菜单项添加到状态菜单。首先,您需要创建NSStatusbar,它接受NSImage。此NSImage用于在状态菜单上显示图标。接下来,将菜单项和分隔符添加到状态菜单(在我的例子中是状态菜单)。我将menuItem1作为属性,以便应用程序可以启用/禁用它。这只是一个简单的例子。您可以将NSView添加到状态菜单。如果您想添加一个分隔符,它可以如下所示
[statusMenu addItem:[NSMenuItem separatorItem]];
运行状态菜单应用程序不需要应用程序窗口。但是,如果要将状态应用程序提交到苹果的Mac App Store,您必须第一次显示主应用程序窗口。在声称状态栏不工作之前,您首先应该知道状态栏是什么。我甚至不知道你为什么要把代码放在AppDelegate文件的awakFromNib方法中。如果你知道状态栏的功能,那么你显示应用程序窗口的屏幕截图有什么意义呢?@ElTomato重点是显示我得到的东西。(我已经从我的问题中删除了这个图像,因为它让每个人都感到困惑)@ElTomato对于您之前关于
awakeFromNib
方法中的代码的评论,我把它放在了那里,因为我下面的大多数教程都把它放在那里。我不是Objective-C忍者,也不是Obj-C的极端n00b,我正在努力学习它,所以我会感谢所有我能得到的帮助。是的,我发布了这个截图,因为这是我得到的,而不是我状态栏中的G?@JasdeepSingh你会得到一个NSWindow
,因为这就是你的MainMenu.xib
文件中的内容。我甚至从我的MainMenu.xib中删除了这个窗口,还是一样。哇!非常感谢你,我想我一直在听:)我创建了一个新项目并按照你的指示进行。注意到一些奇怪的事情,我在我的applicationdFinishLaunching
方法中放了一个NSLog
语句,令人惊讶的是,它根本没有被调用。我在某个地方读到,我需要将应用程序的
代理出口连接到我的AppDelegate
我也这样做了,但该方法仍然没有被调用。我认为这是问题的根源。我使用的是Xcode 5.0.2,不确定版本不匹配是否会导致问题?PS:另外,我仍然得到与之前相同的窗口:/终于开始工作了。你的指示奏效了,我只是使用了一个透明的png,它没有显示出来,我不得不点击状态栏来显示下拉列表。谢谢想知道为什么在代码中会重复两次此位:statusItem=[[NSStatusBar systemStatusBar]statusItemWithLength:NSVariableStatusItemLength];statusImage=[NSImage ImageName:@“statusImage”];[statusItem setImage:statusImage];[状态项设置菜单:状态菜单]代码>
@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
[statusMenu addItem:[NSMenuItem separatorItem]];