gpt4 book ai didi

swift - NSTextView 示例中带有 NSTextList 的项目符号列表?

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:37 28 4
gpt4 key购买 nike

我想解析 NSTextView 中的用户输入,以便以“-”开头的行会自动启动项目符号列表。我必须对 NSTextView.textStorage 做什么才能启用项目符号列表,以便在每个项目符号行后按 Enter 键时自动显示下一个项目符号?

我找到了一些例子,但它们都是手动插入项目符号的,所以我想知道指定 let textList = NSTextList(markerFormat: "{box}", options: 0) 如果您必须自己手动插入框符号?

目前,我正在尝试在自定义 NSTextView 中实现此功能,该 NSTextView 具有覆盖 shouldChangeTextInRange(affectedCharRange: NSRange, replacementString: String?) 所以一个简单的示例可以解决最简单的输入情况“- "启动自动项目符号列表将受到高度重视。

更新:

这是我目前使用的代码:

override func shouldChangeTextInRange(affectedCharRange: NSRange, replacementString: String?) -> Bool {
super.shouldChangeTextInRange(affectedCharRange, replacementString: replacementString)

if string == "-" && replacementString == " " {
let textList = NSTextList(markerFormat: "{disc}", options: 0)
let textListParagraphStyle = NSMutableParagraphStyle()
textListParagraphStyle.textLists = [textList]
let attributes = [NSParagraphStyleAttributeName: textListParagraphStyle]
string = "\t\(textList.markerForItemNumber(0))\t"
textStorage?.addAttributes(attributes, range: NSMakeRange(0, textStorage!.string.length))
return false
}
else if affectedCharRange.location > 0 && replacementString == "\n\n" {
textStorage?.insertAttributedString(NSAttributedString(string: "\t"), atIndex: affectedCharRange.location)
return true
}

return true
}

我只是想解决用户在 NSTextView 中输入“-”作为第一个字符的最简单情况。这就是上面的代码所发生的情况: Output in custom NSTextView

开头较大的字体来 self 设置的typingAttributes。如您所见,这会在稍后自动覆盖。

else if 子句返回 false 并直接插入\n 将阻止 NSTextView 自动添加新项目符号。在我第一次从那里返回 true 后,新项目符号会自动添加而无需调用此方法???

最佳答案

尝试使用 Unicode 字符添加项目符号,方法是将 "- "替换为\u{2022}

textView.text = "\u{2022} 这是一个列表项!

关于swift - NSTextView 示例中带有 NSTextList 的项目符号列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36293266/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com