0

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

4

3 回答 3

2

我有一个子类,NSTextView所以你需要访问textStorageandselectedRange不同于[self textStorage]and [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);
于 2012-02-19T15:39:55.500 回答
1

这是一个快捷方式:

NSRange paragraphRange = [textView.textStorage.string paragraphRangeForRange: [textView selectedRange]];
于 2014-06-26T04:30:00.747 回答
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)];

里面有详细的。 如何获取 NSTextView 的选定行范围?

于 2013-05-26T03:04:38.413 回答