Лучший способ изменить цвет фона для NSView - PullRequest
139 голосов
/ 03 июня 2010

Я ищу лучший способ изменить backgroundColor на NSView. Я также хотел бы иметь возможность установить соответствующую alpha маску для NSView. Что-то вроде:

myView.backgroundColor = [NSColor colorWithCalibratedRed:0.227f 
                                                   green:0.251f 
                                                    blue:0.337 
                                                   alpha:0.8];

Я заметил, что у NSWindow есть этот метод, и я не большой поклонник фоновых опций NSColorWheel или NSImage, но, если они лучшие, желающие использовать.

Ответы [ 17 ]

3 голосов
/ 17 мая 2015

Я проверил следующее, и у меня это сработало (в Swift):

view.wantsLayer = true
view.layer?.backgroundColor = NSColor.blackColor().colorWithAlphaComponent(0.5).CGColor
3 голосов
/ 08 ноября 2018

Без сомнения, самый простой способ, также совместимый с Color Set Assets:

Swift

view.setValue(NSColor.white, forKey: "backgroundColor")

Objective-C

[view setValue: NSColor.whiteColor forKey: "backgroundColor"];

Интерфейсный Разработчик :

Добавить пользовательский атрибут backgroundColor в конструкторе интерфейсов типа NSColor.

3 голосов
/ 11 декабря 2016

В Swift 3 вы можете создать расширение для этого:

extension NSView {
    func setBackgroundColor(_ color: NSColor) {
        wantsLayer = true
        layer?.backgroundColor = color.cgColor
    }
}

// how to use
btn.setBackgroundColor(NSColor.gray)
1 голос
/ 30 января 2018

Просто маленький многоразовый класс (Swift 4.1)

class View: NSView {

   var backgroundColor: NSColor?

   convenience init() {
      self.init(frame: NSRect())
   }

   override func draw(_ dirtyRect: NSRect) {
      if let backgroundColor = backgroundColor {
         backgroundColor.setFill()
         dirtyRect.fill()
      } else {
         super.draw(dirtyRect)
      }
   }
}

// Usage
let view = View()
view.backgroundColor = .white
1 голос
/ 08 августа 2013

Посмотрите на RMSkinnedView . Вы можете установить цвет фона NSView в Интерфейсном Разработчике.

1 голос
/ 21 августа 2015

В Swift вы можете создать подкласс NSView и сделать это

class MyView:NSView {
    required init?(coder: NSCoder) {
        super.init(coder: coder);

        self.wantsLayer = true;
        self.layer?.backgroundColor = NSColor.redColor().CGColor;
    }
}
0 голосов
/ 10 марта 2019

Это поддерживает изменение внешнего вида системы (включение или выключение темного режима) во время работы приложения. Вы также можете установить цвет фона в Интерфейсном Разработчике, если сначала установите класс представления для BackgroundColorView.


class BackgroundColorView: NSView {
    @IBInspectable var backgroundColor: NSColor? {
        didSet { needsDisplay = true }
    }

    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
        wantsLayer = true
    }

    required init?(coder decoder: NSCoder) {
        super.init(coder: decoder)
        wantsLayer = true
    }

    override var wantsUpdateLayer: Bool { return true }

    override func updateLayer() {
        layer?.backgroundColor = backgroundColor?.cgColor
    }
}
...