我有一个NSTextView
用户可以输入。不同之处在于,我经常在用户输入TextStorage
时对它们进行更改(例如,某些信息是通过网络输入的,我需要将其表示为{{1 }}合并这些更改。
我可以成功做到这一点-我创建了一个NSTextView
,即使在幕后发生变化时,它也可以跟踪MovableCursor
。
我使这段代码适用于SelectedRange
和iOS (UITextView)
。问题是,在Mac上,Mac (NSTextView)
通常会在滚动条中跳转(即,视图中的可见位置发生变化)。它在NSTextView
上根本不会移动-一切正常,即使UITextView
发生了变化,光标也不在窗口中移动。
仅使用TextStorage
不起作用-可能使选择可见,但必须在同一位置将其显示。
我尝试抓住Scroller的VerticalScroller位置,然后在进行更改后重新应用它。
ScrollRangeToVisible
好吧,我可以看到滚动条没有移动(预期),但是文本仍然移动。滚动条某种程度上通过var scroll_pos = contentViewScroller.VerticalScroller.FloatValue;
...make changes...
contentViewScroller.VerticalScroller.FloatValue = scroll_pos;
偏离了其位置。当我开始移动滚动条时,似乎有点“轻拂”并重新对齐。
因此...关于如何更改NSTextView的TextStorage,同时将Cursor(或SelectedRange)固定在屏幕上相同位置的任何想法。
[注意:当然,有时无法实现这种固定性-例如,如果删除了光标之前的所有内容,则光标必须移至顶部。没关系。]
非常感谢。