4

の選択された行範囲を取得する方法はNSTextView?

4

3 に答える 3

5

あなたのためのアウトラインアルゴリズム:

  1. 選択を取得 -selectedRange
  2. 選択範囲の最後の文字をカバーする長さ 1 の範囲を作成します
  3. lineRangeForRange選択範囲の最後の文字がある行を構成する文字の範囲を取得するために使用します。
  4. さかのぼってカウントします - 選択範囲の最後の文字を含む行の範囲を取得し、前の行の最後の文字の範囲を作成lineRangeForRangeし、前の行の範囲を見つけるために使用します。テキストの先頭に到達するまで、このプロセスを繰り返します。元の選択範囲の最後の文字の行番号が表示されます。
  5. 上記の行範囲ごとに、選択範囲の開始位置がその行にあるかどうかを確認します。現在の行数に注意してください。これは、選択範囲の最後の文字を含む行のゼロから始まり、テキストの先頭に進むにつれて増加しています。(4) の反復が終了すると、簡単な計算で最初の文字の行番号が得られます。

もちろん、別の方法で作業することもできます。テキストの最初の文字の行範囲から始めて、先に進みます。選択の開始/終了がその行にあるかどうかをチェックするすべての行について、選択の終了を含む行が見つかったときに停止します。

逆のコードについては、行の範囲を指定すると、それらをカバーする選択が生成されます。Apple のTextEdit コード サンプルを参照してくださいLinePanelController.m。これはあなたが読みたいこととは反対のことをしていますが、上記の方法がどのように機能するかを示しています.

HTH。

于 2013-05-25T20:16:46.180 に答える
2

最初に、選択範囲を取得します次に、ライン範囲を[textView selectedRange]
取得できます- (NSRange)lineRangeForRange:(NSRange)range[textView string]

NSRange sel = [textView selectedRange];
NSString *viewContent = [textView string];
NSRange lineRange = [viewContent lineRangeForRange:NSMakeRange(sel.location,0)];
于 2013-05-26T02:13:39.977 に答える
-1

NSTextView のドキュメントを参照してください。テキストの選択に関するセクション全体があります。

そのようなselectedRanges

于 2013-05-25T15:45:26.740 に答える