Поместите курсор в конец текста в uitextview и выделите позицию - PullRequest
6 голосов
/ 07 сентября 2010

Используя приведенный ниже код, я помещаю текст из plist в textView.TextView еще не является первым корреспондентом;текст изначально только для чтения.В iOS4 код goToEndOfNote позиционирует курсор в конце текста и прокручивает до этой позиции.В 3.1.3 он не прокручивается до конца, пока не коснется экрана (что не требуется, если не требуется изменение или дополнение), что делает textView первым отвечающим.Я хотел бы, чтобы он работал в 3.1.3, как и в 4.0.Любые идеи, пожалуйста.Спасибо.

    ...
    self.temp = [[[NSMutableArray alloc] initWithContentsOfFile:myPlistPath] autorelease]; 
    self.textView.text = [self.temp objectAtIndex:0];
    [self goToEndOfNote];
    //[self performSelector:@selector(goToEndOfNote) withObject:nil afterDelay:0.1];
}

- (void) goToEndOfNote {
    NSUInteger length = self.textView.text.length;  
    self.textView.selectedRange = NSMakeRange(length, 0);
}

Ответы [ 4 ]

3 голосов
/ 07 сентября 2010

Я использую setContentOffset:animated для прокрутки к вершине UITextView в одном из моих приложений. Должно работать и для прокрутки вниз. Попробуйте:

- (void) goToEndOfNote {
    NSUInteger length = self.textView.text.length;  
    self.textView.selectedRange = NSMakeRange(length, 0);
    [textView setContentOffset:CGPointMake(0, length) animated:YES];
}

Вы можете также обернуть это, чтобы это произошло только для 3.1.3 и ниже:

- (void) goToEndOfNote {
    NSUInteger length = self.textView.text.length;  
    self.textView.selectedRange = NSMakeRange(length, 0);
    NSString* systemVersion = [[UIDevice currentDevice] systemVersion];
    float version = [systemVersion floatValue];
    if (version < 3.2) {
        [textView setContentOffset:CGPointMake(0, length) animated:YES];
    }
}
2 голосов
/ 07 сентября 2010

Не уверен, что это ответ, но он работает.

В 3.1.3 с исходным кодом курсор был в конце, но прокрутка была вверху. В 4.0 оба были внизу.

NSUInteger length = self.textView.text.length;
self.textView.selectedRange = NSMakeRange(length, 0);

Затем я заметил, что в 3.1.3, переключая 0 и длину, прокрутка была внизу, но курсор был вверху.

NSUInteger length = self.textView.text.length;
self.textView.selectedRange = NSMakeRange(0, length); 

Соединение двух работало. Он прокручивается до нижнего NSMakeRange (0, length), предположительно до конца диапазона, затем NSMakeRange (length, 0) помещает курсор туда, и все без изменений, что он делает в 4.0

NSUInteger length = self.textView.text.length;
self.textView.selectedRange = NSMakeRange(0, length); 
self.textView.selectedRange = NSMakeRange(length, 0);
1 голос
/ 09 июня 2015

Уже поздно, но я нашел рабочее решение для этого. это нужно немного взломать

- (void) textViewDidBeginEditing:(UITextView*)textview
{
   [self performSelector:@selector(placeCursorAtEnd:) withObject:textview afterDelay:0.01];
}

- (void)placeCursorAtEnd:(UITextView *)textview
{
     NSUInteger length = textview.text.length;

    textview.selectedRange = NSMakeRange(length, 0);

    [textView setContentOffset:CGPointMake(0, length) animated:YES];
}
1 голос
/ 03 апреля 2013

Вы можете использовать [UITextView -setSelectedRange:], чтобы установить диапазон (location = TEXT_VIEW_STRING_LENGTH, length = 0), чтобы подвести курсор к концу текста, а затем вызвать [UITextView -scrollRangeToVisible:] с тем же диапазоном, чтобы прокрутить курсор до видимого.

...