2016-01-21 20 views
6

Ich habe eine App mit einem Popover, das auf einer Statusleiste angezeigt wird. Die Sache ist, wenn Sie auf das Symbol klicken, während Sie sich in einer Vollbild-App befinden, dann bewegen Sie die Maus weg von der Menüleiste, um auf etwas im Popup zu klicken, die Menüleiste bewegt sich nach oben, und auch das Popup. Es ist nervig.Wie verhindere ich, dass die Menüleiste nach unten bewegt wird, wenn mein Popover geöffnet ist?

Wer weiß von einer Möglichkeit, dies zu lösen? Ich habe versucht, dem Popup ein unsichtbares Menü hinzuzufügen, aber ich kann das Menü nicht unsichtbar machen.

Screenshot aus Gründen der Klarheit das lästige Teil ist, wo ich meine Maus Welle um:

enter image description here

+0

BTW - Sie haben nicht nur dieses Problem, wenn Sie im Vollbildmodus gehen. Am 10.11 ist es möglich, die Menüleiste immer automatisch zu verbergen: http://www.tekrevue.com/tip/hide-menu-bar-os-x-el-capitan/ – cacau

+0

Sie können dieses Thema, Sounds überprüfen wie eine saubere Lösung für Ihr Problem: http://stackoverflow.com/questions/35008501/detect-if-menu-bar-is-hidden-or-visible – Jay

Antwort

1

Das Popover-Fenster wird verschoben, da das übergeordnete Fenster das Statuselementfenster ist, und wenn sich das übergeordnete Fenster bewegt, bewegt sich das Kind mit. (Bevor ich diese untersucht, ich wusste nicht einmal, Kakao hatte Eltern und Kind-Fenster.) Ich löste das Problem mit diesem Code unmittelbar nach dem popover zeigt:

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

nun noch die Menüleiste nach oben bewegt, aber zumindest bleibt das Popup an der gleichen Stelle.

+1

Mit Fenstern, die Sie nicht besitzen, würde ich nicht die Route runtergehen, wenn ich Sie wäre. Aus Erfahrung, die nach Ärger verlangt und dazu neigt, mit den kommenden OS-Versionen zu brechen (oder sogar mit älteren Versionen als dem Betriebssystem, auf dem Sie es getestet haben) – cacau

+0

@cacau Irgendwelche besseren Ideen? – tbodt

0

Super Hacky Ansatz:

Benutzerdefinierte Fenster mit einigen Super-High Fenster Ebene zu machen Es erscheint über der Menüleiste und fügt dem neuen Fenster eine transparente benutzerdefinierte Ansicht hinzu, die Mausklicks entsprechend Ihren Anforderungen erfasst und verarbeitet/blockiert.

Oder:

Holen Sie sich das Fenster Instanz der popover anzuzeigen und zu verfolgen ist mit/Griff NSWindowWillMoveNotification/NSWindowDidMoveNotification.

+0

Nicht ganz was mein Problem ist, fügte einen Screenshot zur Klärung. – tbodt

+0

Ah, richtig! Alle Benachrichtigungen, die gesendet werden, wenn die Menüleiste ausgeblendet wird? Probieren Sie einfach alles und achten Sie besonders auf die in https://developer.apple.com/library/mac/documentation/General/Conceptual/MOSXAppProgrammingGuide/FullScreenApp/FullScreenApp genannten.html – cacau

+0

Wenn lokale Benachrichtigungen gesendet werden, sind sie für das Programm im Vollbildmodus. Es könnte eine verteilte Benachrichtigung geben, aber was könnte ich dagegen tun? Popup verbergen? Das würde es unmöglich machen, das Popup im Vollbildmodus zu verwenden. – tbodt

1

Entweder Carbon events verwenden oder für Dinge sehen in der Menüleiste (Fenster vom Typ NSStatusBarWindow) passiert:

Benachrichtigungen vom Typ

  • NSWindowDidChangeOcclusionStateNotification
  • NSWindowDidMoveNotification
  • NSWindowWillCloseNotification
  • NSWindowDidCloseNotification

mit einem Objekt der Klasse NSStatusBarWindow sollten Sie genug Informationen über die Menüleiste zeigen oder verstecken, um die ordnungsgemäße Handhabung hinzuzufügen.

+1

Und was ist die richtige Handhabung? Der schwierige Teil findet nicht heraus, wenn sich das Statuselement bewegt, es verhindert, dass sich das Popup bewegt. – tbodt