/ / Come aggiungere programmaticamente viste a NSWindow (o NSView)? - rapido, macos, nsview, nswindow

Come aggiungere le viste a NSWindow (o NSView) in modo programmatico? - rapido, macos, nsview, nswindow

Ho questo codice nel mio ViewController. Il punto di vista che sto aggiungendo a livello di programmazione non è comunque da vedere.

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)

}

Inoltre ho provato a creare un NSWindowController personalizzato e l'ho impostato come Classe personalizzata della mia finestra principale nello storyboard del builder di interfacce. Lì ho il seguente codice:

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)

}

Questo non funziona neanche: /

Ho anche provato a impostare v.wantsLayer = true come una delle risposte che ho trovato online suggerito, tuttavia, mi è sembrato strano dall'inizio e ovviamente non ha fatto nulla.

Cosa sto facendo di sbagliato qui?

risposte:

1 per risposta № 1

Rispondendo alla mia domanda mentre esaurivo tutti i possibili scenari e, naturalmente, il colpevole finì per essere wantsLayer.

Inizialmente ho fatto:

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)
}
}
}

Ho potuto vedere che la vista è stata aggiunta a contentView, tuttavia era invisibile. Ho fatto molte cose prima di rendermi conto del mio errore che era:

Il v.wantsLayer = true la dichiarazione doveva essere (ovviamente) al di sopra della linea in cui ho specificato il colore di sfondo del livello stesso.

Quindi sì ... ora funziona:

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)
}