2016-08-02 10 views
1

I just create a new application project   1. Xcode Version 7.3 (7D175)
  2.swift Version 2.2
  3.Mac OS Version OS X EI Capitan 10.11.4
Ich möchte eine Desktop-Anwendung für Mac OS machen und Ich hatte die Fensterebene eingestellt, aber es funktioniert nicht.wie man Fenster mit swift immer an der Spitze hält?

+1

Haben Sie das Fenster vor dem eingestellten Wert (! = Nil) überprüft? – larva

+0

Fenster Eigenschaft ist es wahrscheinlich Null. Nichts ist mit Ihrer Syntax verbunden. –

+0

http://stackoverflow.com/a/35714647/2303865 –

Antwort

1

Sie müssen Fenster überprüfen! = Nil vor jedem benutzerdefinierten Code

class ViewController: NSViewController { 
    var addedObserver = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if let window = self.view.window { 
      // custom window here 
      window.level = Int(CGWindowLevelForKey(.FloatingWindowLevelKey)) 
     } else { 
      addedObserver = true 
      self.addObserver(self, forKeyPath: "view.window", options: [.New, .Initial], context: nil) 
     } 
    } 

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
     if let window = self.view.window { 
      // custom window here 
      window.level = Int(CGWindowLevelForKey(.FloatingWindowLevelKey)) 
     } 
    } 

    deinit { 
     if addedObserver { 
      self.removeObserver(self, forKeyPath: "view.window") 
     } 
    } 
} 
+0

Vielen Dank. Ich hatte Ihren Code zu meinem Projekt hinzufügen, aber es kann nicht Fenster oben halten –

+0

@SteveJiang hat Code in // benutzerdefinierte Fenster hier aufgerufen werden? Ich habe ein neues Projekt erstellt und diesen Code getestet. Es funktioniert und bringt Fenster zu Font oben, aber ich bin mir nicht sicher, was NSWindow Ebene tun. – larva

+1

'NSApplication.sharedApplication(). Windows.first? .level =' –

0

noch testen, aber dies ist die Antwort der Larve in Swift 4 und es scheint zu funktionieren.

var observingFloat = false 

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.view.wantsLayer = true 

     if self.view.window != nil { 
      NSApplication.shared.windows.first?.level = NSWindow.Level(rawValue: 1) 
     } else { 
      observingFloat = true 
      self.addObserver(self, forKeyPath: "view.window", options: [.new, .initial], context: nil) 
     } 
    } 

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 

     if self.view.window != nil { 
      NSApplication.shared.windows.first?.level = NSWindow.Level(rawValue: 1) 
     } 
    } 
Verwandte Themen