所以我写了这个应用程序来熟悉 Swift 和 OSX 编程。这是一个笔记应用程序。注释窗口由一个 NSTextView 和一个可以打开 NSFontPanel 的按钮组成。
更改字体效果很好。选择尺码?没问题。想要更改字体的属性,如颜色、下划线等?我完全不确定如何让它发挥作用。
其他来源(例如这里和这里)似乎表明 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)
}
所以..我的目标有两个:
- 了解这里发生了什么
- 我在 fontPanel 中所做的任何更改都会反映在 NSTextView 选定的文本中。
谢谢你。