2016-12-06 22 views
0

isVisibleプロパティを使用してNSWindowが開いているか閉じているかを検出しようとしていますが、期待通りに動作しません。たとえば、私はのloadWindow方法をオーバーライド私のNSWindowController(私は、拡張された画面上でフルスクリーンのウェブを表示する必要があります):NSWindowのisVisibleプロパティがtrueに設定されています

override func loadWindow() { 
    self.contentController = WKUserContentController(); 

    guard let contentController = self.contentController else { 
     return 
    } 

    let config = WKWebViewConfiguration() 
    config.userContentController = contentController 


    let externalScreens = NSScreen.externalScreens() 
    let screen = externalScreens.count == 0 ? NSScreen.main()! : externalScreens[0] 

    window = KeyWindow(
     contentRect: NSRect(x: 0, y: 0, width: screen.frame.width, height: screen.frame.height), 
     styleMask: NSBorderlessWindowMask, 
     backing: NSBackingStoreType.buffered, 
     defer: false, 
     screen: screen 
    ) 

    if let w = window { 
     w.level = Int(CGShieldingWindowLevel()) 
     w.backgroundColor = NSColor.black 
     w.makeKeyAndOrderFront(self) 
     w.makeFirstResponder(self) 

     webView = WKWebView(frame: w.frame, configuration: config) 
     w.contentView = webView! 

     debugPrint("Window is visible = \(w.isVisible)") 
    } 
} 

KeyWindow:

import Foundation 
import AppKit 

class KeyWindow : NSWindow { 
    override var canBecomeKey: Bool { 
     return true 
    } 
} 

しかしdebugPrintはisVisibleプロパティがtrueに設定されていることを示しています窓はまだ開かれていませんでしたが(self.showWindow(self)コントローラの方法はまだ呼び出されていませんでした)。

ウィンドウが開いている(画面に表示されている)かどうかを確実に確認するにはどうすればよいですか?あなたのコード内

+0

'w.makeKeyAndOrderFront(self)'は実際にウィンドウ – ColdSteel

+0

hmを "開く"べきであるが、そうではない私が 'showWindow'を呼び出すまで画面上に表示されます –

+0

私はここであなたの問題だと思っています:-)あなたはshieldWindowLevelを使用しています、これはおそらく別のshieldWindowlevelで覆われていますか? '[w makeKeyWindow];を呼び出そうとしています。 – ColdSteel

答えて

0

if let w = window { 
    w.level = Int(CGShieldingWindowLevel()) 
    w.backgroundColor = NSColor.black 
    w.makeKeyAndOrderFront(self) 
    w.makeFirstResponder(self) 

    webView = WKWebView(frame: w.frame, configuration: config) 
    w.contentView = webView! 

    debugPrint("Window is visible = \(w.isVisible)") 
} 

あなたはApple documentationに応じてチェック 前w.makeKeyAndOrderFront(self)を呼び出している:

FUNC makeKeyAndOrderFront(どれ?) 画面リストの先頭にウィンドウを移動します、そのレベル内で、それをキーウィンドウにします。つまり、 と表示されます。

したがって、厳密などisVisible作品宣伝:) isVisible

ウィンドウが(それは他のウィンドウによって隠さいた場合でも、 )画面上であるとき、このプロパティの値がtrueです。それ以外の場合はfalseです。あなたはCGShieldingWindowLevelとしてのレベルを設定しているという事実にもかかわらず、それは多分ちょうど目に見えないため、 w.makeKeyAndOrderFront(self)の呼び出しにあなたがこの中func orderFrontRegardless()

Apple Doc

を呼び出すために試すことができます - あなたのウィンドウが画面上にする必要があります

場合はすぐにウィンドウを表示する - しかし、私はそれが別のものだと思う質問

関連する問題