保存和恢复NSTextView的位置
问题描述:
我希望能够保存NSTextView的当前文本和可见区域并将其恢复。使用visibleRect和scrollRectToVisible:似乎会传递不一致的结果。如果我只是做:保存和恢复NSTextView的位置
- (void)restorePosition
{
NSRect r = [self.textView visibleRect];
[self.textView.layoutManager replaceTextStorage: self.textView.textStorage];
[self.textView scrollRectToVisible: r];
}
认为会留在位置视图时位于距顶部小于85线,但进一步下跌,我去了进一步的腾飞就越大。在从顶部200行结束时,它在277结束,在300结束于408等
没有replaceTextStorage它如预期的那样工作,但替换文本和查找以前的地方是整个点。有关替换文本的内容会导致线矩形计算变得不可靠。
很显然,我打算从真实应用程序中保存的对象中获取新的visibleRect和textStorage,但是这说明了最小代码的问题。
任何想法?
答
我有一个类似的问题,涉及恢复滚动位置。对我来说,解决办法是改变可见矩形前强制文本视图布局:
[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];
我已经发现,使用'NSLayoutManager *的layoutManager = myTextView.layoutManager; NSRange glyphRange = [layoutManager glyphRangeForBoundingRect:[self.textView visibleRect] inTextContainer:self.textView.textContainer]; NSRange charRange = [layoutManager characterRangeForGlyphRange:glyphRange actualGlyphRange:&glyphRange];' 保存位置和'[myTextView scrollRangeToVisible:charRange];'几乎可以恢复工作。它可以被一行关闭,但比scrollRectToVisible:do好得多。 – Matt 2013-04-12 16:10:36