如何在NSTextView中获取当前段落的范围,其中cussor停留在那里?

时间:2011-03-25 02:26:56

标签: cocoa nstextview paragraph

现在我需要更改nstextview中段落的对齐而不选择它,所以我需要知道段落当前范围的范围?

3 个答案:

答案 0 :(得分:2)

我有NSTextView的子类,因此您需要访问与textStorageselectedRange不同的[self textStorage][self selectedRange]

NSTextStorage *textStorage = [self textStorage];
NSString *string = [textStorage string];

NSUInteger editEnd = [self selectedRange].location;
NSUInteger editStart = editEnd-[textStorage editedRange].length;
NSUInteger maxLength = [string length];


while (editStart > 0) {
    unichar theChr = [string characterAtIndex:editStart-1];
    if( theChr == '\n' || theChr == '\r' ) {
        break;
    }
    --editStart;
}
while (editEnd < maxLength) {
    unichar theChr = [string characterAtIndex:editEnd];
    if( theChr == '\n' || theChr == '\r' ) {
        break;
    }
    ++editEnd;
}

NSRange paragraphRange = NSMakeRange(editStart, editEnd-editStart);

答案 1 :(得分:1)

这是一条捷径:

NSRange paragraphRange = [textView.textStorage.string paragraphRangeForRange: [textView selectedRange]];

答案 2 :(得分:0)

首先,获取光标所在的范围[textView selectedRange]
然后,您可以通过- (NSRange)lineRangeForRange:(NSRange)range

[textView string]获取行范围

以下是一个示例代码:

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

详细信息。 How to get the selected line range of NSTextView?