所以我有这个应用程序,我正在编写,以熟悉Swift和OSX编程。这是一个笔记应用程序。注释窗口包含一个NSTextView和一个显示NSFontPanel的按钮。
更改字体效果很好。选择尺码?没问题。想要更改字体的属性,如颜色,下划线等?我完全不确定如何让它发挥作用。
其他来源(例如Regenerate evolution scripts in play 2和here)似乎暗示NSTextView应该是NSFontManager的目标,并且NSTextView拥有它自己的changeAttributes()实现。然而,使NSTextView成为目标却什么都不做。当我在NSTextView中选择文本并调出字体面板时,我在fontPanel中进行的第一个选择会导致取消选择文本。
使我的视图控制器成为NSFontManager的目标并为changeAttributes实现存根产生NSFontEffectsBox类型的对象,我无法找到任何好的文档。
问题是......我应该怎么做NSFontEffectsBox?如果在fontPanel中我选择带双下划线的蓝色文本,我可以在调试器中看到这些属性,但我无法以编程方式访问它们。
以下是相关代码:
override func viewDidLoad() {
super.viewDidLoad()
loadNoteIntoInterface()
noteBody.keyDelegate = self // noteBody is the NSTextView
noteBody.delegate = self
noteBody.usesFontPanel = true
fontManager = NSFontManager.sharedFontManager()
fontManager!.target = self
}
更改字体的代码。这很好用。
override func changeFont(sender: AnyObject?) {
let fm = sender as! NSFontManager
if noteBody.selectedRange().length>0 {
let theFont = fm.convertFont((noteBody.textStorage?.font)!)
noteBody.textStorage?.setAttributes([NSFontAttributeName: theFont], range: noteBody.selectedRange())
}
}
changeAttributes的存根代码:
func changeAttributes(sender: AnyObject) {
print(sender)
}
所以..我的目标是两个:
谢谢。
答案 0 :(得分:1)
所以我确实找到了各种答案。以下是我在程序中实现changeAttributes()的方法:
func changeAttributes(sender: AnyObject) {
var newAttributes = sender.convertAttributes([String : AnyObject]())
newAttributes["NSForegroundColorAttributeName"] = newAttributes["NSColor"]
newAttributes["NSUnderlineStyleAttributeName"] = newAttributes["NSUnderline"]
newAttributes["NSStrikethroughStyleAttributeName"] = newAttributes["NSStrikethrough"]
newAttributes["NSUnderlineColorAttributeName"] = newAttributes["NSUnderlineColor"]
newAttributes["NSStrikethroughColorAttributeName"] = newAttributes["NSStrikethroughColor"]
print(newAttributes)
if noteBody.selectedRange().length>0 {
noteBody.textStorage?.addAttributes(newAttributes, range: noteBody.selectedRange())
}
}
在sender上调用convertAttributes()会返回一个属性数组,但这些名称似乎不是NSAttributedString正在寻找的。所以我只是将它们从旧名称复制到新名称并发送给他们。这是一个好的开始,但我可能会在添加属性之前删除旧密钥。
问题仍然存在,那......这是正确的做事方式吗?