2013-04-11 136 views
4

我希望能夠保存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,但是這說明了最小代碼的問題。

任何想法?

+1

我已經發現,使用'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

回答

0

我有一個類似的問題,涉及恢復滾動位置。對我來說,解決辦法是改變可見矩形前強制文本視圖佈局:

[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];