繁体   English   中英

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

[英]How to get the selected line range of NSTextView?

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

概述算法:

  1. 得到选择selectedRange
  2. 创建长度为1的范围,覆盖选择的最后一个字符
  3. 使用lineRangeForRange获取组成所选内容的最后一个字符所在行的字符的范围。
  4. 现在向后计算并计数-您已经获得了包含所选内容的最后一个字符的行的范围,为上一行的最后一个字符创建了一个范围,并使用lineRangeForRange查找了前一行的范围。 重复此过程,直到到达文本开头。 您将拥有原始选择中最后一个字符的行号。
  5. 在上面的每个行范围内,您都会生成检查选择项的起始位置是否在该行中的信息。 请注意当前的行数-从包含所选内容的最后一个字符的行的零开始,并随着文本的开始而增加。 (4)的迭代完成后,简单的数学运算将为您提供第一个字符的行号。

当然,您可以采用其他方法-从文本中第一个字符的行范围开始,然后继续。 对于每一行,检查选择内容的开始/结束位置是否在该行中,找到包含选择内容结束的行时停止。

对于执行反向操作的代码-给定一定范围的行,它会产生覆盖它们的选择-请参阅Apple的TextEdit代码示例 ,请查看LinePanelController.m 尽管这与您要阅读的内容相反,但是它将显示上述方法的工作方式。

HTH。

首先,通过[textView selectedRange]获取所选范围
然后,您可以通过[textView string] - (NSRange)lineRangeForRange:(NSRange)range [textView string] - (NSRange)lineRangeForRange:(NSRange)range来获得行范围

NSRange sel = [textView selectedRange];
NSString *viewContent = [textView string];
NSRange lineRange = [viewContent lineRangeForRange:NSMakeRange(sel.location,0)];

看看NSTextView文档,有一个完整的部分专门讨论文本选择:

selectedRanges

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM