NSButton有圆角和背景颜色

Roe*_*e84 13 macos swift

我想要一个简单的按钮(带圆角的按钮),并为其添加背景.我尝试了两件事:

1 - 使用圆形按钮图像:这很好用,直到我需要缩放按钮,这会导致圆形部分看起来很难看.

2 - 扩展按钮并为其添加颜色 - 但是当我点击按钮时我遇到了麻烦 - 我希望"推"状态与"常规"状态颜色相同,但事实并非如此.

这是我用来扩展按钮的代码:

 override func drawRect(dirtyRect: NSRect)
    {
        if let bgColor = bgColor {
            self.layer?.cornerRadius = 4
            self.layer?.masksToBounds = true
            self.layer?.backgroundColor = bgColor.CGColor
            bgColor.setFill()

            NSRectFill(dirtyRect)
        }

        super.drawRect(dirtyRect)
    }
Run Code Online (Sandbox Code Playgroud)

无论如何,方法1和方法2都不起作用,那么我怎样才能做到这一点?只是一个简单的按钮...... :(

编辑:我问的是OSX

小智 6

我做了一个按钮并成功了.它看起来像这样:

码:

override func draw(_ dirtyRect: NSRect) {
    super.draw(dirtyRect)
    // Drawing code here.
    if let bgColor = bgColor {
        self.layer?.cornerRadius = 4
        self.layer?.masksToBounds = true
        self.layer?.backgroundColor = bgColor.cgColor
        bgColor.setFill()
        NSRectFill(dirtyRect)
    }
}
Run Code Online (Sandbox Code Playgroud)

drawRect被draw替换,CGColor被cgColor替换.你和我之间的区别在于订单.你打电话super.draw(dirtyRect)给最后一个,我先打电话给它.也许你的按钮看起来像这样:

我希望这可以解决你的问题.


roc*_*cky 5

覆盖NSButtonCell的drawWithFrame方法:

func drawWithFrame(cellFrame: NSRect, inView controlView: NSView) {
    var border = NSBezierPath(roundedRect: NSInsetRect(cellFrame, 0.5, 0.5), xRadius: 3, yRadius: 3)
    NSColor.greenColor().set()
    border.fill()

    var style = NSParagraphStyle.defaultParagraphStyle()
    style.alignment = NSCenterTextAlignment
    var attr = [NSParagraphStyleAttributeName : style, NSForegroundColorAttributeName : NSColor.whiteColor()]

    self.title.drawInRect(cellFrame, withAttributes: attr)
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,结果看起来不那么好,但既然你是唯一回答OSX的人,我会给你赏金 (3认同)