在没有设置特定字体(OSX)的情况下在Swift中加粗文本范围

时间:2016-03-23 08:04:00

标签: swift macos

我正在尝试将此代码示例转换为在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一样。

0 个答案:

没有答案