2013-04-11 2 views
4

NSTextView의 현재 텍스트 및 보이는 영역을 저장하고 복원 할 수 있기를 원합니다. visibleRect 및 scrollRectToVisible 사용 : 일관성없는 결과를 제공하는 것 같습니다. 난 그냥 할 경우 뷰가 맨 미만 85 선을 배치 할 때NSTextView의 위치 저장 및 복원

- (void)restorePosition 
{ 
    NSRect r = [self.textView visibleRect]; 

    [self.textView.layoutManager replaceTextStorage: self.textView.textStorage]; 
    [self.textView scrollRectToVisible: r]; 
} 

뷰는 위치에 남아있을 것입니다, 그러나하게 떨어져 내려 더 내가 더 이동합니다. 상단에서 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보다 훨씬 좋습니다 : 그렇습니다. – Matt

답변

0

스크롤 위치 복원과 관련하여 비슷한 문제가있었습니다. 나에게 해결책은 보이는 사각형을 변경하기 전에 텍스트보기를 레이아웃에 강제로 적용하는 것이었다 :

[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];