我想在NSTextView中解析用户输入,以便以" - "开头的行。会自动启动项目符号列表。我该如何处理NSTextView.textStorage以启用项目符号列表,以便在每个项目符号行后按Enter键时自动显示下一个项目符号?
我找到了一些例子,但他们都手工插入子弹,所以我想知道如果你必须手动插入方框符号,指定let textList = NSTextList(markerFormat: "{box}", options: 0)
是什么意思自己?
目前,我正试图在自定义的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中的第一个字符。这是上面的代码:
开头较大的字体来自我设置的typingAttributes。如您所见,这会自动被覆盖。
从else if
子句返回false并直接插入\ n将阻止NSTextView自动添加新项目符号。在我第一次从那里返回true
之后,会自动添加新的项目符号而不调用此方法???
答案 0 :(得分:-1)
尝试通过替换"- " with \u{2022}
textView.text = " \u{2022} This is a list item!