如何获得NSTextView的选定行范围?

时间:2013-05-25 15:36:52

标签: objective-c macos cocoa nstextview

如何获取NSTextView的所选行范围?

3 个答案:

答案 0 :(得分:5)

您的大纲算法:

  1. 获取选择 - selectedRange
  2. 创建一个长度为1的范围,覆盖选择的最后一个字符
  3. 使用lineRangeForRange获取构成该选区最后一个字符所在行的字符的范围。
  4. 现在向后工作并计数 - 你已经获得了包含所选内容的最后一个字符的行的范围,为前一行的最后一个字符设置了一个范围,并使用lineRangeForRange来查找该范围。前一行。重复此过程,直到到达文本的开头。您将拥有原始选择中最后一个字符的行号。
  5. 在上述每个行范围内,您可以检查选择的起始位置是否在该行中。请注意当前行数 - 从包含选择的最后一个字符的行开始为零,并且随着您前进到文本的开头而增加。当(4)的迭代结束时,简单的数学将为您提供第一个字符的行号。
  6. 当然你可以反过来工作 - 从文本中第一个字符的行范围开始,然后继续前进。对于检查选择的开始/结束是否在该行中的每一行,当您找到包含选择结束的行时停止。

    对于反向执行的代码 - 给定一系列行,它会产生一个选择以覆盖它们 - 请参阅Apple的TextEdit code sample,查看LinePanelController.m。虽然这与您想要阅读的内容相反,但它将显示上述方法的工作原理。

    HTH。

答案 1 :(得分: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)];

答案 2 :(得分:-1)

看一下NSTextView文档,有一整节用于处理文本选择:

例如selectedRanges