mik
mik

Reputation: 147

Background color of NSGridview

I tried to set the background color of an NSGridView by subclassing it and overriding its draw method like this:

class GridViewGreen: NSGridView
{ override func draw(_ dirtyRect: NSRect)
  { super.draw(dirtyRect)

    let color = NSColor.green
    let bp = NSBezierPath(rect: dirtyRect)
    color.set()
    bp.stroke()

    print("drawing GridViewGreen")
  }
}

But the draw method is never called.

Upvotes: 1

Views: 849

Answers (3)

neverbored
neverbored

Reputation: 1

NSGridView is a subclass of NSView so it inherits all of NSView's properties and methods including drawing - as seen in the draw(_ dirtyRect: NSRect) function. Make sure to include an IBOutlet in your view controller or change the NSGridView class in Interface Builder to GridViewGreen.

class GridViewGreen: NSGridView {
    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
    }
    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)
        NSColor.green.setFill()
        dirtyRect.fill()
        print("drawing GridViewGreen")
    }
}

Basically your view controller doesn't know that you subclassed your grid view.

Upvotes: 0

Lucas Derraugh
Lucas Derraugh

Reputation: 7049

Update: Preferably take catlan's answer if possible. He is right in that NSGridView isn't really meant for rendering and this approach will more or less force it down that path.

At this point, pretty much every Cocoa application should be layer-backing their views and NSGridView and NSStackView aren't any different. Simply set the background color on the layer.

let gridView = NSGridView(views: [[view1, view2]])
gridView.wantsLayer = true
gridView.layer?.backgroundColor = NSColor.red.cgColor

Upvotes: 0

catlan
catlan

Reputation: 25256

NSGridViewis a lightweight component, like NSStackView, for layout only. Because of this it doesn't draw.

Just put the NSGridView into an NSBox and set its fillColor.

Upvotes: 5

Related Questions