现在我需要更改nstextview中段落的对齐而不选择它,所以我需要知道段落当前范围的范围?
答案 0 :(得分:2)
我有NSTextView
的子类,因此您需要访问与textStorage
和selectedRange
不同的[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)];