来回切换NSTextViews的文本存储

时间:2010-06-16 17:10:28

标签: objective-c cocoa

我正在尝试在产品中创建一个功能,使用户能够将textview分成两部分。这样做的方法是从它的superview中删除textview,创建一个NSSplitView并将textview和一个新的NSTextView实例添加到这个splitview。最后,我将这两个textviews共享相同的文本存储,以使它们共享相同的内容。

效果很好。但问题是当我想让两个textviews中的一个改变textstorage时。 NSLayoutManager中的replaceTextStorage方法导致两个NSTextView都更改textStorage。 API文档声明:

  

replaceTextStorage :全部   NSLayoutManager对象共享   然后是原始的NSTextStorage对象   分享新的。这种方法使   保持所需的所有调整   这些关系完好无损,不像   setTextStorage:方法

因此有意义的是它会这样做。但问题是如何才能让两个(或更多)文本视图首先共享相同的存储空间,然后让它们使用自己的存储空间?

我已经尝试更换layoutManager甚至创建NSTextViews的新实例但没有运气......

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您希望两个NSTextView有差异NSTextStorage,那么您必须创建两个并行文本系统。

首先,从以下架构开始(这是Text System Overview中描述的架构):

  • 常见的NSTextStorage
  • 使用NSLayoutManager / NSTextContainer / NSTextView的第一个分支
  • 使用NSLayoutManager / NSTextContainer / NSTextView的第二个分支

然后,在每个NSLayoutManager上调用replaceTextStorage:方法设置不同的NSTextStorage。