7
votes

Modification des attributs NSTExtExtStorage provoque une vue de défilement pour sauter autour

J'ai mis en œuvre la syntaxe de base en surbrillance en définissant correctement le NStextStorage délégué de mon NStextview -TextStoragedIdProcessité .

Le processus de base est comme suit xxx

chaque fois que -removeattribute: plage: ou -Ajouter: valeur: plage est invoqué lorsqu'un caractère espace est entré, le nstextview s sur NSScrollView emplacement commence à sauter (le bouton de défilement passe à une position aléatoire près de la)

Qu'est-ce qui cause cela?


0 commentaires

5 Réponses :


2
votes

active l'appelant -Beginetiting et - questionnement à l'intérieur d'un -TextStoragedIdProcessité: n'est pas très sain! Je passe au nstextview S -DidCangetext à la place.


1 commentaires

Ceci est incorrect et ne devrait pas être la réponse acceptée. La bonne réponse, par TRSS, diagnostit correctement le problème comme étant lié à la disposition non contiguë.



7
votes

Eric. Je ne sais pas si vous avez résolu ceci. Cependant, j'ai rencontré un problème similaire et j'ai découvert que l'option "mise en page non contiguë" dans l'inspecteur des attributs Xcode 4.x pour le NStextView au cas où le problème résoudra le problème. La documentation pour NslayoutManager fournit plus d'indices (sous "Présentation"): "Layout non contigune est un comportement en option gestionnaire de mise en page Nouveau dans Mac OS X V10.5 ...".

Voici le message

Dans mon cas, j'ai connu ce comportement indépendamment de l'utilisation de méthodes de délégation ou de méthodes intermédiaires appelées via des notifications et ne s'est produite que lorsque le contenu de stockage de texte est devenu plus grand que la vue Texte joint, provoquant un défilement d'être actif et "poussant" la vue de texte jusqu'au sommet. Après avoir tourné l'option, le "saut" n'était plus observé. J'espère que ça aide. Tom


0 commentaires

2
votes

Pourquoi ne pas simplement supprimer -Beginetiting et - questionnement appels? Je viens d'avoir le même problème et cela résout le problème pour moi.


1 commentaires

Mais assez étroitement, le problème semble réapparaître au hasard! Je suis incapable d'isoler la cause exacte. Mais je suis sûr que j'ai remarqué que le problème disparaisse instantanément une fois que j'ai supprimé -Beginetiting et - affectation appels. -DidCangetext semble être une bonne alternative bien que je ne l'ai pas encore essayé puisque la plupart des gens recommandent d'utiliser -textStoragedIdProcessité pour la mise en surbrillance de la syntaxe, même lorsque le programme est modifié à travers code.



13
votes

J'ai enfin découvert de mes observations que le saut accumulait non seulement lorsque vous appuyez sur la barre d'espace, mais également pour d'autres clés telles que le retour arrière et cela arrive exactement quand ces deux sont tous les deux.
- la mise en page non contiguë est allumée de
- Toute modification, même aux attributs, du texte précédant la région visible est faite à l'intérieur -TextStoragedIdProcessité:
On dirait que c'est un bug dans la fonction de mise en page non contiguë! Serait bien si un expert pourrait confirmer.
Il semble avoir rien à voir avec appeler -Beginetiting et - questionnement .


2 commentaires

Je faisais mon traitement dans Traitement dans un stockage de texte personnalisé. Déménager à la méthode de la déléguée a résolu mon problème. Merci!


Cela semble être la bonne réponse et devrait être la réponse acceptée. Désactiver la mise en page non contiguë dans IB fixe le problème. Autres correctifs proposés, tels que l'utilisation de didchangetext à la place ou n'utilisant pas Beginediting / Mise en scène intérieure textstoragedIdProcessité: , ne sont pas Une bonne idée, qu'ils évitent ou non ce bogue spécifique. Je viens de déposer ce bogue sur le journaliste du bogue d'Apple, # 24539235. S'il vous plaît déposer des bugs!



0
votes

textview.layouttManager? .AllowsnoncontiguLayout = faux

Résolu mon problème


0 commentaires