2016-01-21 38 views
6

Mam aplikację z popover, która pojawia się na pasku stanu. Chodzi o to, że gdy klikniesz na ikonę podczas korzystania z aplikacji pełnoekranowej, odsuniesz myszkę od paska menu, aby kliknąć coś w okienku popup, pasek menu przesunie się w górę, podobnie jak popup. To denerwujące.Jak zapobiec przesunięciu paska menu w dół, gdy mój popover jest otwarty?

Ktoś wie o jakimkolwiek sposobie rozwiązania tego problemu? Próbowałem dołączać niewidoczne menu do wyskakującego okienka, ale nie mogę ustawić menu jako niewidocznego.

ekranu do jasności, irytujące jest to, gdzie fala moje myszy wokół:

enter image description here

+0

BTW - ten problem będzie występował nie tylko podczas pracy na pełnym ekranie. W dniu 10.11 można zawsze automatycznie ukrywać pasek menu: http://www.tekrevue.com/tip/hide-menu-bar-os-x-el-capitan/ – cacau

+0

Możesz chcieć sprawdzić ten temat, dźwięki jak czyste rozwiązanie twojego problemu: http://stackoverflow.com/questions/35008501/detect-if-menu-bar-is-hidden-or-visible – Jay

Odpowiedz

1

Okno popover się porusza, ponieważ jego okno nadrzędne jest oknem pozycji statusu, a kiedy okno rodzica się porusza, dziecko przesuwa się wraz z nim. (Przed badałem tego, ja nawet nie wiem, Cocoa miał Ojciec i dziecko okien). I rozwiązać problem z tym kodem natychmiast po okazaniu popover:

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

Teraz pasek menu nadal porusza się w górę, ale przynajmniej popup pozostaje w tym samym miejscu.

+1

Wiadomości z oknami, których nie posiadasz .. nie pójdą tą trasą, gdybym był tobą. Z doświadczenia, które wymaga kłopotów i podatności na zerwanie z nadchodzącymi wersjami systemu operacyjnego (lub nawet starszymi wersjami niż system operacyjny, na którym je testowałeś) – cacau

+0

@ cacau Jakieś lepsze pomysły? – tbodt

0

Super hacky podejścia:

okno Niestandardowy z jakimś super wysokim poziomie okna, aby pojawia się na pasku menu, a następnie dodaje przezroczysty niestandardowy widok do nowego okna, które przechwytuje i obsługuje/blokuje kliknięcia myszą w zależności od potrzeb.

Lub:

Uzyskaj instancji okno popover jest używany do wyświetlania i śledzenia/uchwyt NSWindowWillMoveNotification/NSWindowDidMoveNotification.

+0

Nie do końca mój problem, dodałem zrzut ekranu, aby wyjaśnić. – tbodt

+0

Ah, racja! Wszelkie powiadomienia wysyłane po ukryciu paska menu? Po prostu spróbuj słuchać czegokolwiek i uważaj szczególnie na te wymienione w https://developer.apple.com/library/mac/documentation/General/Conceptual/MOSXAppProgrammingGuide/FullScreenApp/FullScreenApp.html – cacau

+0

Jeśli są jakieś lokalne powiadomienia wysłane, będą one do programu, który jest na pełnym ekranie. Może istnieć powiadomienie o rozproszeniu, ale co mogę z tym zrobić? Ukryj popup? To uniemożliwiłoby użycie popup w trybie pełnoekranowym. – tbodt

1

Albo użyć Carbon events lub obserwować, co dzieje się na pasku menu (okno typu NSStatusBarWindow):

Powiadomienia typu

  • NSWindowDidChangeOcclusionStateNotification
  • NSWindowDidMoveNotification
  • NSWindowWillCloseNotification
  • NSWindowDidCloseNotification

z obiektem klasy NSStatusBarWindow powinien dostarczyć wystarczającej informacji o pasku menu pokazującym lub ukrywającym w celu poprawienia obsługi.

+1

Jaka jest właściwa obsługa? Najtrudniejszą częścią nie jest ustalenie, kiedy element statusu się porusza, uniemożliwia to przesuwanie okna. – tbodt