我在窗口顶部创建了一个状态栏菜单项,如下所示:
- (void)createStatusBarItem {
_statusBar = [NSStatusBar systemStatusBar];
_statusItem = [_statusBar statusItemWithLength:NSSquareStatusItemLength];
_statusItem.image = [NSImage imageNamed:@"icon_off.png" ];
_statusItem.highlightMode = YES;
_statusItem.menu = [self createStatusBarMenu];
}
菜单:
- (NSMenu *)createStatusBarMenu {
NSMenu *menu = [[NSMenu alloc] init];
...
}
我现在想要定期让菜单下拉,就像用户点击了状态栏图标一样。这甚至可能吗?
答案 0 :(得分:1)
self.timer = [NSTimer timerWithTimeInterval: 5.0 target: self selector: @selector(displayMenu:) userInfo: nil repeats: YES];
[[NSRunLoop currentRunLoop] addTimer: self.timer forMode: NSRunLoopCommonModes];
然后在它调用的方法中,显示菜单。
[self.statusItem popUpStatusItemMenu: self.statusItem.menu];
在这种情况下,它会每5秒左右弹出一次。但是,由于您不知道它何时关闭,因此用户可以将其关闭然后进行定时器调用,并在稍后重新打开它。因此,您可能希望将自己设置为菜单的委托,并实施menuWillOpen:
和menuDidClose:
。在menuDidClose:
中你可能会重新制作计时器(或设置它的开火日期)以重置间隔,以便在菜单上次关闭之前打开菜单再等5秒钟。如果用户没有在menuWillOpen:
等中自行关闭菜单,您也可以创建一个自动关闭菜单的计时器,这样菜单就会每隔X秒打开一次,如果没有任何操作则自动关闭X秒。它(你打电话给NSMenu的cancelTracking
。)