2016-03-26 3 views
1

У меня этот код в моем ViewController. Однако представление, которое я добавляю программно, нигде не видно.Как программно добавлять представления к NSWindow (или NSView)?

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) 

} 

Кроме того, я попытался создать пользовательские NSWindowController и установить, что в качестве пользовательского класса моего главного окна в интерфейс строитель раскадровки. Там у меня есть следующий код:

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) 

} 

Это не работает либо:/

Я даже попытался установить v.wantsLayer = true как один из ответов, которые я нашел в Интернете предположить, однако, что казалось странным с самого начала идти и Конечно, ничего не сделал.

Что я здесь делаю неправильно?

+0

вам необходимо установить 'v.wantsLayer = true' –

+0

Я попытался' v.wantsLayer = true' в обоих вызовов метода 'viewDidLoad()' и 'windowDidLoad()' еще раз, однако оба представления все еще не видны. Я даже пробовал сумасшедшие вещи, такие как установка цвета слоя contentView на 'clearColor', думая, что, возможно, все представления добавляются под ним. Я даже зашел так далеко, чтобы сделать «self.window» .contentView? .addSubview (v, позиционируется: NSWindowOrderingMode.Above, relativeTo: self.window? .contentView) '... Еще нет сигары. Мнения нигде не видно. –

ответ

0

Отвечая на мой собственный вопрос, поскольку я исчерпал все возможные сценарии, и, конечно же, виновник оказался wantsLayer.

Первоначально я сделал:

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

я мог видеть, что мнение было добавлено в contentView, однако он был невидим. Я многое сделал, прежде чем осознал свою ошибку:

Объявление v.wantsLayer = true должно было (конечно) быть над линией, где я указал backgroundColor самого слоя.

Так что да ... это теперь работает:

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 –