【发布时间】:2015-10-30 14:44:22
【问题描述】:
所以我写了这个应用程序来熟悉 Swift 和 OSX 编程。这是一个笔记应用程序。笔记窗口由一个 NSTextView 和一个可以调出 NSFontPanel 的按钮组成。
更改字体效果很好。选择尺码?没问题。想要更改字体的属性,如颜色、下划线等?我完全不确定如何让它发挥作用。
其他来源(例如here 和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)
}
所以.. 我的目标有两个:
- 了解这里发生了什么
- 我在 fontPanel 中所做的任何更改都会反映在 NSTextView 选定的文本中。
谢谢。
【问题讨论】:
标签: swift macos nstextview nsfontmanager nsfontpanel