【问题标题】:NSStatusItem only responds after clicking twiceNSStatusItem 只在点击两次后才响应
【发布时间】:2015-04-10 16:01:16
【问题描述】:

除了 NSStatusBar 中显示的图标外,我还有一个带有自己窗口的 OSX 应用程序。 NSStatusBar 的原因是让应用程序在主窗口关闭时在后台运行。尝试单击状态栏图标时,我必须单击两次才能得到响应(显示弹出框)。我想单击一次并立即得到响应。 NStatusBar 的设置如下:

NSStatusItem *statusItem = [[NSStatusBar systemStatusBar]statusItemWithLength:32];
        statusItemView = [[SDStatusItemView alloc] initWithStatusItem:statusItem];
        statusItemView.image = [NSImage imageNamed:@"myLogo"];
        statusItemView.alternateImage = [NSImage imageNamed:@"myLogo"];
        statusItemView.target=self;
        statusItemView.action = @selector(togglePanel:);

        [self.statusItemView.window setIgnoresMouseEvents:NO];
        [self.statusItemView.window setAcceptsMouseMovedEvents:YES];

我的 statusItemView(NSView 的子类)设置为:

-(BOOL) acceptsFirstResponder{
    return YES;
}

- (BOOL)canBecomeKeyWindow
{
    return YES;
}

一切正常,除了我必须单击状态栏图标两次才能得到响应。我用谷歌搜索了这个并找到了类似的questions,就像这个one,但没有什么能解决我的问题。任何帮助将不胜感激。谢谢。 T

更新: 我最终使用优秀的库 CCNStatusItem

创建了我的 StatusItem

【问题讨论】:

  • canBecomeKeyWindow 仅适用于 NSWindow 对象,您不需要。您是否需要在弹出窗口出现之前始终单击两次,或者仅在您第一次尝试时才会发生?另外,您能否将 togglePanel: 方法的内容添加到问题中?

标签: objective-c macos cocoa nsstatusitem


【解决方案1】:

你不能真正影响菜单栏的窗口。为您的状态项使用自定义 NSView。

在此处查看被否决的答案:NSStatusItem releases icon

【讨论】:

  • 我明白了。我删除了我的 statusItemView.image,但保留了其余部分。我的 statusItemView 是 NSView 的一个子类,带有一个 mouseDown 方法,canBecomeKeyWindow,并接受第一响应者。在第二次单击之前,这仍然不起作用。我是否需要添加跟踪等才能拥有自定义视图?您能否提供有关如何使其工作的更多详细信息?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 2019-07-13
  • 2020-08-19
  • 2018-07-02
  • 2011-06-22
  • 2019-04-18
  • 2023-03-17
相关资源
最近更新 更多