2016-03-26 10 views
1

Ich habe diesen Code in meinem ViewController. Die Ansicht, die ich programmatisch hinzufüge, ist jedoch nirgendwo zu sehen.Wie programmatisch Ansichten zu NSWindow (oder NSView) hinzufügen?

override func viewDidLoad() { 
    super.viewDidLoad() 

    let f: NSRect = NSMakeRect(0, 0, 200, 200) 
    let v: NSView = NSView(frame: f) 
    v.layer?.backgroundColor = NSColor.yellowColor().CGColor 
    self.view.addSubview(v) 

} 

Außerdem habe ich versucht, dass die benutzerdefinierte Klasse meines Hauptfensters in der Interface Builder Storyboard einen benutzerdefinierten NSWindowController und gesetzt zu schaffen. Dort habe ich den folgenden Code:

override func windowDidLoad() { 
    super.windowDidLoad() 

    let f: NSRect = NSMakeRect(0, 0, 200, 200) 
    let v: NSView = NSView(frame: f) 
    v.layer?.backgroundColor = NSColor.yellowColor().CGColor 
    self.window?.contentView?.addSubview(v) 

} 

Das funktioniert auch nicht:/

Ich habe sogar versucht v.wantsLayer = true als eine der Antworten Einstellung ich online vorgeschlagen gefunden, aber die seltsam schien aus der sich gehen und von Natürlich hat nichts gemacht.

Was mache ich hier falsch?

+0

Sie einstellen müssen 'v.wantsLayer = true' –

+0

Ich habe versucht,' v.wantsLayer = true' in beiden Verfahren ruft 'viewDidLoad()' und 'windowDidLoad()' noch einmal, beide Ansichten sind jedoch immer noch nicht sichtbar. Ich habe sogar verrückte Dinge ausprobiert, wie zum Beispiel das Festlegen der Layerfarbe von contentView auf 'clearColor', wobei ich denke, dass möglicherweise alle Ansichten darunter eingefügt werden. Ich ging sogar so weit, dass ich "self.window? .contentView? .addSubview (v, positioniert: NSWindowOrderingMode.Above, relativeTo: self.window? .contentView)" ... immer noch keine Zigarre. Ansichten sind nirgendwo zu sehen. –

Antwort

0

Meine eigene Frage zu beantworten, als ich alle möglichen Szenarien erschöpft habe und natürlich der Täter war wantsLayer.

Anfangs tat ich:

override func windowDidLoad() { 
    super.windowDidLoad() 

    let f: NSRect = NSMakeRect(32, 32, 200, 200) 
    let v: NSView = NSView(frame: f) 
    v.layer?.backgroundColor = NSColor.greenColor().CGColor 
    v.wantsLayer = true 
    self.window?.contentView?.addSubview(v) 

    if let views = self.window?.contentView?.subviews { 
     for v in views { 
      print(v.frame) 
     } 
    } 
} 

ich, dass der Blick auf die content wurde hinzugefügt sehen konnte, aber es war unsichtbar. Ich machte eine Menge Dinge, bevor ich meinen Fehler erkannte, der war:

Die v.wantsLayer = true Deklaration musste (natürlich) über der Linie sein, wo ich die backgroundColor der Schicht selbst angegeben.

Also ja ... das jetzt funktioniert:

override func windowDidLoad() { 
    super.windowDidLoad() 
    let f: NSRect = NSMakeRect(32, 32, 200, 200) 
    let v: NSView = NSView(frame: f) 
    v.wantsLayer = true 
    v.layer?.backgroundColor = NSColor.greenColor().CGColor 
    self.window?.contentView?.addSubview(v) 
} 
+1

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

Verwandte Themen