我正在尝试将此代码示例转换为在OSX应用上使用:
func applyStylesToRange(searchRange: NSRange) {
let fontDescriptor = UIFontDescriptor.preferredFontDescriptorWithTextStyle(UIFontTextStyleBody)
let boldFontDescriptor = fontDescriptor.fontDescriptorWithSymbolicTraits(.TraitBold)
let boldFont = UIFont(descriptor: boldFontDescriptor, size: 0)
let normalFont = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)
let regexStr = "(\\*\\w+(\\s\\w+)*\\*)"
let regex = NSRegularExpression(pattern: regexStr, options: nil, error: nil)!
let boldAttributes = [NSFontAttributeName : boldFont]
let normalAttributes = [NSFontAttributeName : normalFont]
regex.enumerateMatchesInString(backingStore.string, options: nil, range: searchRange) {
match, flags, stop in
let matchRange = match.rangeAtIndex(1)
self.addAttributes(boldAttributes, range: matchRange)
let maxRange = matchRange.location + matchRange.length
if maxRange + 1 < self.length {
self.addAttributes(normalAttributes, range: NSMakeRange(maxRange, 1))
}
}
}
OSX似乎不存在用于获取用户定义字体的一些字体描述符方法。我能找到的所有解决这个问题的例子都涉及使用“boldSystemFontOfSize()”,但我不想为粗体文本显式设置字体大小。
我找到了几个部分解决方案,例如第一部分使用以下内容:
let fontManager = NSFontManager.sharedFontManager()
let normalFont = NSFont.userFontOfSize(0)
let boldFont = fontManager.convertFont(normalFont!, toHaveTrait: .BoldFontMask)
这个问题是匹配正则表达式的文本(因此加粗)不响应用户启动的字体更改(面部和大小)。当用户更改OSX的字体大小时,似乎没有方便的NSNotificationCenter消息,就像iOS一样。