0

全て、

基本的にボイラープレートテキストの挿入とインデントをサポートするように NSTextView を微調整しています。ボイラー プレートのインデント スタイルを編集した範囲から削除した後、ボイラー プレートのテキストのインデントが非ボイラー プレートのテキストに適用されるという問題が発生しています (ユーザーが Enter キーを押したときにスタイルを削除します)。ここで奇妙なことが起こります:

エディターでテキスト ルーラーを表示すると、インデントが変更される動作が見られます。リターン キーを入力したら、次のコードを実行します。

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];

最初はこれでうまくいきましたが、カーソルをこの新しい行の上にあるボイラープレートのインデントされたテキストに移動すると、タブストップが再び表示され、カーソルをキャリッジリターンが作成した新しい行に戻しても消えません。 . 前の段落のスタイルが新しい段落に適用されているようです。

問題を示すビデオ (30 秒 1.3 MB) を Web に投稿しました。

http://gordonjl.com/files/indentingProblem%20-%20Computer.m4v

また: はい、これはひどい方法ですが、これはこのリリースの最後のバグであり、出荷する必要があります。今後のリリースでは、NSTextViews をスクロール領域に挿入し、より明示的な方法で管理したいと考えています。それまで、助けて!

4

1 に答える 1

0

私はあなたの目的を本当に理解していませんが、FWIW、段落属性を設定している場合は、rangeForUserParagraphChange を使用することをお勧めします。カーソルが textStorage の最後にある場合、空の範囲に属性を適用しても意味がないため、textView のtypingAttributes を設定する必要があります。

于 2010-08-18T01:15:48.533 に答える