2015-12-21 4 views
3

Мое приложение имеет два окна (главное и видео), и оба могут самостоятельно войти в полноэкранный режим. В главном окне есть кнопка для переключения видимости видеоокна. Когда окно видео видно, кнопка просто посылает сообщение близко, как это:Как закрыть полноэкранный режим NSWindow программно?

[theVideoWindow close]; 

Он отлично работает, когда окно видео не в полноэкранном режиме.

Но когда видеоокно работает в полноэкранном режиме, окно выглядит как упорядоченное (закрытое), но оно все еще живое (как невидимое окно) и принимает событие мыши. Пользователь не может взаимодействовать с другими приложениями, потому что невидимое окно поглощает все события мыши и не может закрыть его, потому что строка заголовка и меню исчезли.

Есть ли какие-либо рекомендации по закрытию окна полноэкранного режима программным способом, отличным от выхода из полноэкранного режима, а затем закрытие его в обработчике уведомлений NSWindowDidExitFullScreenNotification?

Заранее спасибо.


Это, кажется, моя ошибка. Другой разработчик явно отправляет orderFront: в обработчике уведомлений NSWindowDidExitFullScreenNotification, чтобы окно выглядело сразу после выхода из полноэкранного режима, и это сделало окно еще живым.

ответ

3

На мое приложение, я проверяю, если окно на полный экран, а затем я использую метод ToogleFullScreen

- (BOOL)isFullScreen { 
    return ((self.window.styleMask & NSFullScreenWindowMask) == NSFullScreenWindowMask); 
} 

if([self isFullscreen]) { 
    [self.window toggleFullScreen:nil]; 
} 
0

@ решения Саула в Swift 4:

func isFullScreen() -> Bool { 
    guard let window = view.window else { return false } 
    return window.styleMask.contains(.fullScreen) 
} 

if isFullscreen() { 
    view.window?.toggleFullScreen(nil) 
}