2016-01-21 70 views
6

我有一个应用程序出现在状态栏项目上的弹出窗口。问题是,当您在全屏应用程序中单击图标时,然后将鼠标从菜单栏移​​开以单击弹出窗口中的某些内容,菜单栏向上移动,弹出窗口也会移动。它很烦人。当我的弹出窗口打开时,如何防止菜单栏向下移动?

任何人都知道任何方式来解决这个问题?我试图在弹出窗口中附加一个不可见的菜单,但是我无法使菜单看不见。

截图为清楚起见,恼人的部分是我挥一挥鼠标左右:

enter image description here

+0

顺便说一句 - 你不仅会在全屏时遇到这个问题。在10.11版本中,可以始终自动隐藏菜单栏: http://www.tekrevue.com/tip/hide-menu-bar-os-x-el-el-capitan/ – cacau

+0

您可能想查看此主题,听起来像一个干净的解决方案,您的问题: http://stackoverflow.com/questions/35008501/detect-if-menu-bar-is-hidden-or-visible – Jay

回答

1

弹出式窗口正在移动,因为其父窗口是状态项窗口,而当父窗口移动时,子窗口随之移动。 (我调查此之前,我甚至不知道可可有父母和孩子的窗口。)我解决了这个代码的问题显示酥料饼后:

NSWindow *popoverWindow = self.popup.contentViewController.view.window; 
[popoverWindow.parentWindow removeChildWindow:popoverWindow]; 

现在,菜单栏依然向上移动,但至少弹出窗口保持在同一个地方。

+1

与你不拥有的窗户混在一起..如果我是你的话,不会走下那条路。从经验中寻求麻烦,并且容易与即将发布的操作系统版本(甚至比已经测试过的操作系统相比更旧的版本)中断。 – cacau

+0

@cacau有什么更好的想法? – tbodt

0

超级哈克方法:

自定义窗口,一些超高窗位,使它会出现在菜单栏上,然后在新窗口中添加一个透明的自定义视图,以根据需要捕捉和处理/阻止鼠标点击。

或者:

获取酥料饼的使用,显示和跟踪/处理NSWindowWillMoveNotification/NSWindowDidMoveNotification窗口实例。

+0

不完全是我的问题是,添加一个屏幕截图澄清。 – tbodt

+0

啊,对!菜单栏隐藏时发送的任何通知?只要尝试听取任何内容并特别注意 中提到的内容即可。https://developer.apple.com/library/mac/documentation/General/Conceptual/MOSXAppProgrammingGuide/FullScreenApp/FullScreenApp。html – cacau

+0

如果有任何本地通知发送,它们将是全屏幕的程序。可能有分发通知,但我能做些什么呢?隐藏弹出窗口?这将导致无法在全屏模式下使用弹出窗口。 – tbodt

1

要么使用Carbon events或观赏的东西发生在菜单栏(NSStatusBarWindow类型的窗口):

类型的

通知

  • NSWindowDidChangeOcclusionStateNotification
  • NSWindowDidMoveNotification
  • NSWindowWillCloseNotification
  • NSWindowDidCloseNotification

与类NSStatusBarWindow的对象应该给你足够的信息显示或隐藏菜单栏添加适当的处理。

+1

什么是正确的处理?困难的部分没有发现状态项目何时移动,它阻止了弹出窗口的移动。 – tbodt

相关问题