如何获得选定的行范围NSTextView
?
问问题
4051 次
3 回答
5
为您提供的大纲算法:
- 得到选择 -
selectedRange
- 创建一个长度为 1 的范围,覆盖所选内容的最后一个字符
- 用于
lineRangeForRange
获取组成选择的最后一个字符所在行的字符的范围。 - 现在向后工作并计数 - 你已经获得了包含选择的最后一个字符的行的范围,为前一行的最后一个字符创建一个范围,并使用它
lineRangeForRange
来查找前一行的范围。重复此过程,直到到达文本的开头。您将获得原始选择中最后一个字符的行号。 - 在上面为您生成的每个行范围检查选择的起始位置是否在该行中。请注意当前行数 - 对于包含选择的最后一个字符的行,它从零开始,并且随着您前进到文本的开头而增加。当 (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 文档,有一整节专门用于处理文本选择:
于 2013-05-25T15:45:26.740 回答