我是Objective-C和Mac开发的初学者。我在这个网站上搜索了我正在寻找的答案,但是由于无知,我无法理解应该怎么做。
以下代码在Mac状态栏中实现了一个菜单,靠近屏幕右上角的电池,wifi等图标。
如果用户断开设备与计算机的连接,则使用一个布尔参数调用方法sayAdapterIsConnected
。根据该参数,其中一个菜单项(在本例中为enabledOption
)应该被禁用。我的意思是,应该启用或禁用菜单项。
仅当菜单关闭时才有效。如果statusMenu
已打开,则不会更新。
我知道有一种更新开放式statusItem
菜单的方法。菜单打开时,Wifi状态图标会更新其网络。
@interface ENHeringAppDelegate : NSObject <NSApplicationDelegate> {
NSStatusItem * statusItem;
}
@property (weak) IBOutlet NSMenu *statusMenu;
@property (weak) IBOutlet NSMenuItem *enabledOption;
@end
@implementation ENHeringAppDelegate
- (void) awakeFromNib {
statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
[statusItem setMenu:_statusMenu];
[statusItem setTitle:@"TEST"];
[statusItem setHighlightMode:YES];
}
- (void)sayAdapterIsConnected:(bool)connected {
if (connected)
[self.enabledOption setEnabled:true];
else
[self.enabledOption setEnabled:false];
}
@end
答案 0 :(得分:0)
这里不需要NSMenu。您也不需要setMenu:call。
这是一个有效的例子:
#import <Cocoa/Cocoa.h>
@interface KBCAppDelegate : NSObject <NSApplicationDelegate> {
NSStatusItem *statusItem;
}
@property (assign) IBOutlet NSWindow *window;
- (IBAction)update:(id)sender;
@end
#import "AppDelegate.h"
@implementation KBCAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
[statusItem setTitle:@"TEST"];
[statusItem setHighlightMode:YES];
[statusItem setEnabled:YES];
[statusItem setTarget:self];
}
- (IBAction)update:(id)sender {
if (!statusItem.isEnabled) {
[statusItem setEnabled:true];
} else {
[statusItem setEnabled:false];
}
}
@end
这就是你需要做的一切。 (我使update:
成为一个IBAction,但是像你所展示的那样的无效函数也会起作用)
P.S。 让我们兴高采烈,并且总是在if / then语句中使用大括号,即使只有一行。 :)