Как я могу получить диапазон текущего абзаца в NSTextView, где оставался там cussor? - PullRequest
0 голосов
/ 25 марта 2011

Теперь мне нужно изменить выравнивание абзаца в nstextview без его выбора, поэтому мне нужно знать диапазон текущего диапазона абзаца?

Ответы [ 3 ]

2 голосов
/ 19 февраля 2012

У меня есть подкласс 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 голос
/ 26 июня 2014

Вот ярлык:

NSRange paragraphRange = [textView.textStorage.string paragraphRangeForRange: [textView selectedRange]];
0 голосов
/ 26 мая 2013

Сначала получите диапазон, в котором курсор оставался до [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?

...