cocoa – 按Option键,在应用程序的主菜单中隐藏显示菜单项

cocoa – 按Option键,在应用程序的主菜单中隐藏显示菜单项,第1张

概述我想在应用程序主菜单中添加一个菜单项,这将很少使用.我希望默认情况下隐藏它并仅在用户按住Option键时显示它.我该怎么做呢? 看来我应该处理flagsChanged:,但它是NSResponder的方法,NSMenu不继承NSResponder?我在主窗口控制器中尝试了它,当我点击菜单之前按Option键时它可以工作.以下用例不起作用:单击菜单项(没有项目),按选项键 – 我的项目应该出现,释 我想在应用程序的主菜单中添加一个菜单项,这将很少使用.我希望默认情况下隐藏它并仅在用户按住Option键时显示它.我该怎么做呢?

看来我应该处理flagsChanged:,但它是NSResponder的方法,NSMenu不继承NSResponder?我在主窗口控制器中尝试了它,当我点击菜单之前按Option键时它可以工作.以下用例不起作用:单击菜单项(没有项目),按选项键 – 我的项目应该出现,释放选项键 – 项目应该消失.

我还尝试了NSEvent的addLocalMonitorForEventsMatchingMask:handler:和addGlobalMonitorForEventsMatchingMask:handler:for NSFlagsChangedMask但是当主菜单打开时按下选项键时,不会触发本地或全局处理程序.

我怎样才能做到这一点?

解决方法 将以下内容添加到applicationDIDFinishLaunching中.

// Dynamically update QCServer menu when option key is pressedNSMenu *submenu = [[[NSApp mainMenu] itemWithTitle:@"QCServer"] submenu];    NSTimer *t = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(updateMenu:) userInfo:submenu repeats:YES];[[NSRunLoop currentRunLoop] addTimer:t forMode:NSEventTrackingRunLoopMode];

然后加

- (voID)updateMenu:(NSTimer *)t {    static NSMenuItem *menuItem = nil;    static BOol isShowing = YES;    // Get global modifIEr key flag,[[NSApp currentEvent] modifIErFlags] doesn't update while menus are down    CGEventRef event = CGEventCreate (NulL);    CGEventFlags flags = CGEventGetFlags (event);    BOol optionKeyIspressed = (flags & kCGEventFlagMaskAlternate) == kCGEventFlagMaskAlternate;    CFRelease(event);    NSMenu *menu = [t userInfo];    if (!menuItem) {        // VIEw Batch Jobs...         menuItem = [menu itemAtIndex:6];        [menuItem retain];    }    if (!isShowing && optionKeyIspressed) {        [menu insertItem:menuItem atIndex:6];        [menuItem setEnabled:YES];        isShowing = YES;    } else if (isShowing && !optionKeyIspressed) {        [menu removeItem:menuItem];        isShowing = NO;    }    NSLog(@"optionKeyIspressed %d",optionKeyIspressed);}

计时器仅在跟踪控件时触发,因此不会影响性能.

总结

以上是内存溢出为你收集整理的cocoa – 按Option键,在应用程序的主菜单中隐藏/显示菜单项全部内容,希望文章能够帮你解决cocoa – 按Option键,在应用程序的主菜单中隐藏/显示菜单项所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1023106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存