Tous,tente d'appliquer à nouveau NSMutableParagraphStyle NSRange A défaut
Je suis un peaufinage NSTextView pour soutenir essentiellement l'insertion de texte de la plaque de la chaudière et indenter. Je rencontre un problème où l'indentation du texte de plaque de chaudière est appliquée au texte de plaque de non-chaudière après que je retire le style indenting de plaque de chaudière de la gamme éditée (je supprime le style quand l'utilisateur frappe entrer). Voici où les choses deviennent étranges:
Avec la règle de texte exposée dans l'éditeur, je vois un comportement qui modifie le retrait. Une fois la clé de retour est entré, je lance le code suivant:
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[style setTabStops: [NSArray array]];
[style setHeadIndent:0];
[style setFirstLineHeadIndent:0];
NSRange effectiveRange = [textView rangeForUserTextChange];
[self applyStyleToRange:effectiveRange style:style];
[style release];
Dans un premier temps, cela fonctionne, mais si je déplace mon curseur jusqu'à la chaudière plaqué, indentée au-dessus de cette nouvelle ligne, l'onglet arrêt apparaît à nouveau et ne disparaît pas lorsque je ramène le curseur sur la nouvelle ligne, le retour chariot est créé. Il me semble que le style du paragraphe précédent est appliqué au nouveau paragraphe.
J'ai mis une vidéo sur le web (30 secondes 1.3 Mo) qui montre le problème:
http://gordonjl.com/files/indentingProblem%20-%20Computer.m4v
également: Oui, cela est une façon terrible de le faire, mais cela est le dernier bug pour cette version et je dois l'expédier. Dans une version ultérieure, j'espère insérer NSTextViews dans une zone de défilement et la gérer de manière plus explicite. Jusque-là, aidez!
J'ai fait des progrès, mais j'ai toujours besoin d'aide! Un problème est que le code ci-dessus est exécuté lorsque l'application est avertie qu'un retour chariot est sur le point de se produire. le code ci-dessus est ensuite exécuté _avant le retour chariot, je suis toujours dans le paragraphe ci-dessus! J'exécute maintenant le code par performSelectorOnMainThread. Cela aide, mais toujours pas parfait. Le problème se produira toujours s'il n'y a aucune donnée insérée après le retour chariot (comme un espace char). Y at-il un caractère invisible que je peux insérer pour résoudre ce problème? –
Je pense que je sais pourquoi déplacer le curseur vers le haut puis redescendre applique la mise en forme du style du paragraphe précédent. Ma longueur de editRange est zéro; J'applique le style à une plage de longueur nulle, je ne pense pas qu'il soit possible de placer le curseur dans une plage de longueur zéro sans programmation, donc la plage ne sera jamais sélectionnée. NOUVELLE QUESTION: comment supprimer les paramètres de style lorsque vous êtes à la toute fin du document texte? Vous êtes la longueur de la gamme sera toujours zéro. –
Je pensais que j'ajouterais que ce problème existe également dans TextEdit. En appuyant sur le retour chariot, en supprimant les taquets qui se trouvaient dans le document, déplacez le curseur vers le haut, puis redescendez et tapez; vous constaterez que la tabulation est revenue. ** MON HACK ** - s'il vous plaît dites-moi si vous pouvez penser à quelque chose de mieux. Je vais insérer un espace en avant du curseur afin que le NSRange soit sélectionnable en passant la souris sur le document, s'il le quitte. Mon inquiétude est qu'il y aura un espace à la fin de la doc pour chaque retour chariot. Des idées? –