У меня есть ViewController с UITextView, занимающим весь вид, с навигационной панелью сверху. Почти как приложение «Заметки» от Apple. То, что я пытаюсь достичь, - сохранить курсор текстового поля видимым при запуске редактирования или при редактировании.UITextView как держать курсор над клавиатурой
Мне удалось получить курсор CGPoint
, но мне сложно вычислить точку прокрутки. Как я могу это достичь?
Благодаря
Когда TextView начинает редактирование
- (void)keyboardDidShow:(NSNotification*)aNotification {
// Keyboard
NSDictionary *info = [aNotification userInfo];
CGRect keyPadFrame = [[UIApplication sharedApplication].keyWindow convertRect:[[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue] fromView:self.view];
CGSize keyboardSize = keyPadFrame.size;
kbSize = keyboardSize;
[self scrollToCursor];
}
Когда TextView редактирует
- (void)textViewDidChange:(UITextView *)textView {
// Scroll to cursor
[self scrollToCursor];
}
Прокрутить метод курсора
- (void)scrollToCursor {
// View
CGRect viewBounds = self.view.bounds;
CGRect visibleViewBounds = CGRectMake(viewBounds.origin.x,
viewBounds.origin.y + (self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height),
viewBounds.size.width,
viewBounds.size.height - (kbSize.height + self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height));
// TextView
CGPoint textViewOrigin = [self.view convertRect:self.noteTextView.frame fromView:self.noteTextView.superview].origin;
// Cursor
CGPoint textViewCursor = [self.noteTextView caretRectForPosition:self.noteTextView.selectedTextRange.start].origin;
CGPoint cursorPoint = CGPointMake((textViewCursor.x + textViewOrigin.x), (textViewCursor.y - self.noteTextView.contentOffset.y));
// Scroll to point
if (!CGRectContainsPoint(visibleViewBounds, CGPointMake(cursorPoint.x, cursorPoint.y + 25/*25 for cursor's height*/))) {
[self.noteTextView setContentOffset:CGPointMake(0, 0)/*How to calculate??*/ animated:YES];
}
}
Вы знаете высоту клавиатуры, и вы можете получить размер экрана. Если у вас есть CGPoint курсора. вы можете добавить, что y к высоте клавиатуры (плюс любое дополнение), и уберите это от высоты экрана. Это дает вам значение y для прокрутки. – Siriss
@Siiss Спасибо за ваш ответ! Не могли бы вы отправить ответ с кодом? – SFF