自动标记 NSTextView 的一部分
Automatically markup part of NSTextView
我目前有我的 NSTextView,我希望它自动用粗体写一个主题标签 (#),所以它看起来像这样:
这是我的#NSTextView
的字符串
(文本 before/after 和主题标签的长度是 NOT 常量)
我如何在 Swift (3) 中做到这一点?
请尝试以下操作。我的视图控制器有一个 属性,指向故事板中的 NSTextView 的 textView。
import Cocoa
class ViewController: NSViewController {
@IBOutlet var textView: NSTextView!
override func viewDidLoad() {
super.viewDidLoad()
let text = "This is the string of my #NSTextView. All #hashtags should be displayed in bold."
textView.string = text
let attributes = [NSFontAttributeName : NSFont.systemFont(ofSize: 14.0)]
let range = NSRange(location: 0, length: text.characters.count)
textView.textStorage?.setAttributes(attributes, range: range)
do {
let regexString = "#(\w*)"
let regex = try NSRegularExpression(pattern: regexString, options: [])
let matches = regex.matches(in: text, options: [], range: NSRange(location: 0, length: text.characters.count))
for match in matches {
textView.textStorage?.setAttributes([NSFontAttributeName : NSFont.boldSystemFont(ofSize: 14.0)], range: match.range)
}
} catch let error {
print(error)
}
}
}
我目前有我的 NSTextView,我希望它自动用粗体写一个主题标签 (#),所以它看起来像这样:
这是我的#NSTextView
的字符串(文本 before/after 和主题标签的长度是 NOT 常量) 我如何在 Swift (3) 中做到这一点?
请尝试以下操作。我的视图控制器有一个 属性,指向故事板中的 NSTextView 的 textView。
import Cocoa
class ViewController: NSViewController {
@IBOutlet var textView: NSTextView!
override func viewDidLoad() {
super.viewDidLoad()
let text = "This is the string of my #NSTextView. All #hashtags should be displayed in bold."
textView.string = text
let attributes = [NSFontAttributeName : NSFont.systemFont(ofSize: 14.0)]
let range = NSRange(location: 0, length: text.characters.count)
textView.textStorage?.setAttributes(attributes, range: range)
do {
let regexString = "#(\w*)"
let regex = try NSRegularExpression(pattern: regexString, options: [])
let matches = regex.matches(in: text, options: [], range: NSRange(location: 0, length: text.characters.count))
for match in matches {
textView.textStorage?.setAttributes([NSFontAttributeName : NSFont.boldSystemFont(ofSize: 14.0)], range: match.range)
}
} catch let error {
print(error)
}
}
}