先看NSStatusBar 效果图然后再展开对NSStatusBar的使用。
首先声明一个NSStatusItem。
@property (retain, strong) NSStatusItem *item;
然后对声明的item进行操作
#pragma mark -- NSStatusBar添加图标
- (void)addIcon {
self.item = [[NSStatusBar systemStatusBar] statusItemWithLength:30];
NSImage *image = [NSImage imageNamed:@"menu_icon"];
[image setTemplate:YES];
self.item.image = image;
self.item.highlightMode = YES;
}
#pragma mark - 添加item
- (void)addItem {
NSMenu *menu = [[NSMenu alloc] initWithTitle:@"cloudscreen"];
[menu setMinimumWidth:200];
self.item.menu = menu;
// 打开vpn
NSMenuItem *disableItem = [[NSMenuItem alloc]initWithTitle:@"打开vpn" action:@selector(setAutoProxy) keyEquivalent:@""];
[disableItem setTarget:self];
[menu addItem:disableItem];
// 打开软件
NSMenuItem *showItem = [[NSMenuItem alloc]initWithTitle:@"打开软件" action:@selector(showClock) keyEquivalent:@""];
[showItem setTarget:self];
[menu addItem:showItem];
[menu addItem:[NSMenuItem separatorItem]];
// 退出登录
NSMenuItem *exitItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]]initWithTitle:@"退出" action:@selector(exit) keyEquivalent:@""];
[exitItem setTarget:self];
[menu addItem:exitItem];
}
item实现方法
#pragma mark -- 打开软件
- (void)showClock {
[NSApp activateIgnoringOtherApps:YES];
[self.window makeKeyAndOrderFront:nil];
[self.window performSelector:@selector(orderFront:) withObject:nil afterDelay:0.1];
// 关于软件
// [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://tanhao.sinaapp.com"]];
}
#pragma mark -- Item代理方法
- (void) setAutoProxy {
NSLog(@"setAutoProxy=====");
[[CSVPNManger sharedManger]connectVPN];
}
#pragma mark -- 退出
- (void)exit {
[[CSVPNManger sharedManger]stopVpn];
NSLog(@"关闭vpn");
[[NSApplication sharedApplication] terminate:nil];
}
之前也写了一个简单的NSStatusBar,当窗口关闭的时候NSStatusBar会自动灰掉。知道其原理之后就不会出现类似情况了。