我在窗口顶部创建了一个状态栏菜单项,如下所示:

- (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];
    ...
}


我现在想定期使菜单下拉,就像用户单击状态栏图标一样。那有可能吗?

最佳答案

确实是。首先创建一个重复的NSTimer,以重复调用一个方法并将其存储为属性(以便以后可以使它无效等)。

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。)

关于objective-c - 如何使NSMenu在没有用户输入的情况下定期下拉,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32401569/

10-09 08:05
查看更多