在 Swift 中用 NSTextView 上的 Markdown 替换子字符串
Replace Substring with Markdown on NSTextView in Swift
Swift 5, Xcode 11
在 Stack Overflow 文本编辑器中,您可以 select 一些文本(如下面的 "selected"),单击 粗体 按钮,它会替换:
Text selected here.
...有了这个:
Text **selected** here.
我正在尝试使用 Swift 5.
用 NSTextView
完成同样的事情
我可以这样获取文本的selectedRange
:
@IBAction func clickBold(_ sender: NSButton) {
let range = content.selectedRange() //content is my NSTextView
}
但我不知道如何从这里开始。我找到 replaceSubrange
但它似乎只接受 Range<String.Index>
而不是 NSRange
.
@IBAction func clickBold(_ sender: NSButton) {
let range = content.selectedRange() //content is my NSTextView
var markdownText = content.string
markdownText.replaceSubrange(range, with: "**\(markdownText)**")
}
有没有人以前做过这个,可以帮我看看我错过了什么?谢谢!
您应该使用 NSText
的 replaceCharacters(in:with:)
方法(其子类 NSTextView
是)。
@IBAction func clickBold(_ sender: NSButton) {
let range = content.selectedRange()
let selectedText = (content.string as NSString).substring(with: range)
content.replaceCharacters(in: range, with: "**\(selectedText)**")
}
看起来这样可行:
let range = content.selectedRange()
markdownText = content.string
if let index = Range(range, in: markdownText){
content.replaceCharacters(in: range, with: "**\(markdownText[index])**")
}
它提供了我需要将其包装在 ** **
中的选定文本片段。 @MartinR 的链接 SO post 帮助我看到我可以使用 Range()
.
转换字符串索引
Swift 5, Xcode 11
在 Stack Overflow 文本编辑器中,您可以 select 一些文本(如下面的 "selected"),单击 粗体 按钮,它会替换:
Text selected here.
...有了这个:
Text **selected** here.
我正在尝试使用 Swift 5.
用NSTextView
完成同样的事情
我可以这样获取文本的selectedRange
:
@IBAction func clickBold(_ sender: NSButton) {
let range = content.selectedRange() //content is my NSTextView
}
但我不知道如何从这里开始。我找到 replaceSubrange
但它似乎只接受 Range<String.Index>
而不是 NSRange
.
@IBAction func clickBold(_ sender: NSButton) {
let range = content.selectedRange() //content is my NSTextView
var markdownText = content.string
markdownText.replaceSubrange(range, with: "**\(markdownText)**")
}
有没有人以前做过这个,可以帮我看看我错过了什么?谢谢!
您应该使用 NSText
的 replaceCharacters(in:with:)
方法(其子类 NSTextView
是)。
@IBAction func clickBold(_ sender: NSButton) {
let range = content.selectedRange()
let selectedText = (content.string as NSString).substring(with: range)
content.replaceCharacters(in: range, with: "**\(selectedText)**")
}
看起来这样可行:
let range = content.selectedRange()
markdownText = content.string
if let index = Range(range, in: markdownText){
content.replaceCharacters(in: range, with: "**\(markdownText[index])**")
}
它提供了我需要将其包装在 ** **
中的选定文本片段。 @MartinR 的链接 SO post 帮助我看到我可以使用 Range()
.