如何使用NSLayoutManager用自定义图形替换文本附件?

时间:2019-03-15 15:08:51

标签: ios nsattributedstring nstextattachment nslayoutmanager nstextstorage

我的最终目标是使用户能够NSTextViewUITextView内的文本拆分成几个部分,其中两个后续部分在视觉上由自定义视图分隔符(可能但不一定是水平尺-我希望能够轻松地调整分隔符的视觉外观)。

Example screenshot for section break separators

我需要一个适用于两个平台的解决方案:macOS和iOS

(我的related question专注于针对macOS的解决方案,其中一种利用了NSTextAttachmentCell在iOS上不可用。)

我目前解决此问题的方法如下:

  1. 我在窗口的工具栏中有一个按钮,可以插入分节符。
  2. 当用户点击该按钮时,我将创建一个新的属性字符串,其中没有文本,但带有文本附件:

    let attachment = SectionChangeTextAttachment()
    let attachmentString = NSAttributedString(attachment: attachment)
    

    ({SectionChangeTextAttachment是我创建的NSTextAttachment的自定义子类,目的是能够将本分节符附件与其他可能的附件区分开。)

  3. 我将attachmentString插入到当前光标位置的文本存储中:

    textStorage.insert(attachmentString, at: textView.selectedRange().location)
    
  4. 我创建了一个自定义NSLayoutManager子类。它的任务是查找类SectionChangeTextAttachment的所有附件,并用分隔符图形(或字形?)替换所有出现的附件。这就是问题所在:由于Apple的文档有限且部分过时,我不知道该怎么做。

所以我的问题是:

如何让我的布局管理器用自定义图形(分隔符)替换附件字符(带有特定附件),该自定义图形比字符/字形占用更多的空间?

(我想附件字符没有字形,因此布局管理器没有为其提供任何空间。)

我需要重写哪些方法才能使其正常工作?

(这种方法从一开始就有意义吗?)

0 个答案:

没有答案