小编pjv*_*pjv的帖子

Cocoa:寻找编程操作NSTextView存储的一般策略,而不会弄乱撤消

我在cocoa中编写了一个特殊用途的文本编辑器,它可以执行自动文本替换,内联文本完成(ala Xcode)等操作.

我需要能够以编程方式操纵NSTextViewNSTextStorage响应于1)用户打字,2)用户粘贴,3)用户滴文本.

我尝试了两种不同的通用方法,它们都导致了NSTextView本机撤销管理器以不同的方式失去同步.在每种情况下,我只使用NSTextView委托方法.我一直试图避免继承NSTextviewNSTextStorage(尽管我会在必要时继承).

我想第一种方法是从内做操作textView delegatetextDidChange方法.从该方法中,我分析了已经更改的内容textView,然后调用了一个通用方法,用于修改包含textStorage中的更改的文本,并调用shouldChangeTextInRange:didChangeText:.一些程序化更改允许清除撤消,但有些没有.

第二个(也许更加直观,因为它使修改文本之前居然出现在textView)的方法,我试图从内做操作delegateshouldChangeTextInRange:方法,再次使用该包装的变化在存储有相同的通用存储修改方法打电话给shouldChangeTextInRange:didChangeText:.由于这些更改最初是从内部触发的shouldChangeTextInRange:,因此我设置了一个标志,告诉内部调用shouldChangeTextInRange:被忽略,以免输入递归黑洞.同样,一些程序化更改允许清除撤消,但有些没有(虽然这次不同,并以不同的方式).

有了这样的背景,我的问题是,是否有人能指出我的一般策略,以编程方式操作存储,以NSTextview保持撤消管理器清洁和同步?

NSTextview我应该在哪个委托方法中注意textView中的文本更改(通过键入,粘贴或删除)并对其进行操作NSTextStorage?或者是通过子类化或者NSTextView或者唯一的干净方式来做到这一点NSTextStorage

objective-c nstextview nsundomanager

15
推荐指数
1
解决办法
1333
查看次数

标签 统计

nstextview ×1

nsundomanager ×1

objective-c ×1