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

首先通过获取选中的范围然后就可以通过of[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 回答