2009-11-26 4 views
0

J'ai un NSTextView, à l'intérieur d'un NSScrollView, et je veux le faire défiler jusqu'à exactement où il était après avoir repeuplé le NSTextView avec de nouvelles données. Jusqu'à présent, j'ai essayé des variantes sur le code ci-dessous, mais il ne l'obtient jamais tout à fait raison. J'ai besoin d'une méthode setDocumentVisibleRect, mais il n'y en a pas.Faire défiler un NSTextView à un rect exact?

NSRect oldVisibleRect = [[[self scrollView] contentView] documentVisibleRect]; 

[Code de données] repeupler

[[[self scrollView] contentView] scrollToPoint:newPoint]; 

Toutes les idées?

+0

Quelles sortes de modifications faites-vous au contenu de la vue de texte? –

Répondre

2

Vous aurez besoin d'être plus précis - que dire de ce n'est pas "tout à fait raison"?

-[NSView scrollRectToVisible:] 

Scrolls ancêtre le plus proche du récepteur NSClipView objet à la distance minimale nécessaire si une région déterminée du récepteur devient visible dans la vue en plan.

NSTextView est une sous-classe de NSView (bien que vous devriez toujours examiner si une vue donnée a les coordonnées basculée ...), de sorte que vous pouvez utiliser -scrollRectToVisible:

En outre, à moins que votre contenu change de vue de texte sont à peu près exactement le même que précédemment, le vieux rect visible ne va pas être tout à fait le même, donc je ne m'attendrais pas à ce qu'il se comporte parfaitement. Si vous appliquez uniquement des attributs (comme la coloration syntaxique) au texte, il n'y aura pas besoin de faire quoi que ce soit dans la vue texte (le stockage de texte ou le conteneur) qui nécessiterait un rechargement complet (et un nouveau défilement). Je suppose que cela se résume à "qu'est-ce que vous essayez de faire exactement?"

+0

Salut, réussi à résoudre le problème en apportant toutes les modifications directement à NSTextStorage, et ne jamais interagir directement avec NSTextView. –

+2

La plupart des modifications impliquant des attributs standard AppKit peuvent entraîner un changement de positionnement des glyphes. Pensez à convertir la police en gras, par exemple: Cela peut provoquer une rupture prématurée de la ligne, ce qui peut entraîner la rupture du paragraphe plus tard, ce qui entraînerait la descente de tous les paragraphes suivants. –

Questions connexes