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

时间:2016-03-29 19:19:31

标签: swift macos cocoa nstextview

我想在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中的第一个字符。这是上面的代码: Output in custom NSTextView

开头较大的字体来自我设置的typingAttributes。如您所见,这会自动被覆盖。

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

1 个答案:

答案 0 :(得分:-1)

尝试通过替换"- " with \u{2022}

使用Unicode字符添加项目符号

textView.text = " \u{2022} This is a list item!