首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSPopUpButton子类attributedTitle

NSPopUpButton子类attributedTitle
EN

Stack Overflow用户
提问于 2016-04-28 22:08:00
回答 3查看 1.1K关注 0票数 1

对于如何对NSPopUpButton进行子类划分,我面临一些困惑,即我无法在按钮上设置attributedTitle (以获得自定义字体、颜色和基线偏移量)。

下列代码无效:

代码语言:javascript
复制
class CustomPopUpButton: NSPopUpButton {
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        self.wantsLayer = true
        self.layerContentsRedrawPolicy = .OnSetNeedsDisplay

        self.attributedTitle = NSAttributedString(string: self.title, attributes: [
            NSFontAttributeName: NSFont(name: "Impact", size: 15)!,
            NSForegroundColorAttributeName: NSColor(calibratedRed: 0.2, green: 0.270588235, blue: 0.031372549, alpha: 1),
            NSBaselineOffsetAttributeName: 2
        ])
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-29 14:39:19

正如@Willeke所指出的,我需要在菜单项本身上设置属性化字符串。我只想把它设置在按钮上,让菜单项不以相同的字体显示,但我决定接受它。

在初始化时,我循环遍历菜单中的项目,并在每个项目上设置样式,然后在添加项后重新执行。

下面是我的带有NSPopUpButton s的NSAttributedString子类的最后代码:

代码语言:javascript
复制
class CustomPopUpButton: NSPopUpButton {
    required init?(coder: NSCoder) {
        super.init(coder: coder)

        setItemStyles()
    }

    override func addItemsWithTitles(itemTitles: [String]) {
        super.addItemsWithTitles(itemTitles)

        setItemStyles()
    }

    private func setItemStyles() {
        for item in self.itemArray {
            item.attributedTitle = NSAttributedString(string: item.title, attributes: [
                NSFontAttributeName: NSFont(name: "Impact", size: 15)!,
                NSForegroundColorAttributeName: NSColor(calibratedRed: 0.2, green: 0.270588235, blue: 0.031372549, alpha: 1),
                NSBaselineOffsetAttributeName: 2
            ])
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-04-29 13:36:02

NSPopUpButton显示选定的菜单项。设置菜单项的属性字符串时,弹出按钮将显示属性化标题。

票数 4
EN

Stack Overflow用户

发布于 2016-04-29 09:40:39

在查看文档时,您将看到NSPopUpButton仅适用于字符串。

attributedTitle属性仅引用其超类NSButton,因此不由NSPopUpButton本身表示。但是,要设置标准标题,可以使用setTitle方法。

从医生那里:

如果接收方显示弹出菜单,则此方法将当前项更改为具有指定标题的项,如果不存在,则按该名称添加新项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36926336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档