Как установить положение курсора в UITextView
У меня есть UITextView в моем приложении iPhone, которое доступно для редактирования.
Новая кнопка создается внутри UITextView всякий раз, когда пользователь выбирает определенную функцию.
Поскольку кнопка всегда помещается в левую сторону в текстовом режиме, мне нужно поместить курсор в правой части кнопки, чтобы пользователь мог видеть, что они набирают.
Я не могу найти документальный (или недокументированный) метод для определения местоположения курсора.
Есть ли у кого-нибудь идеи или кто-то еще достиг чего-то подобного?
Ответы
Ответ 1
Я знаю, что это очень поздно, но я думал, что смогу помочь людям застрять в этом (как и я).
performSelector:withObject:afterDelay
работает нормально (другие ответы просто не работают по какой-то странной причине):
- (void)textViewDidBeginEditing:(UITextView *)inView
{
[self performSelector:@selector(setCursorToBeginning:) withObject:inView afterDelay:0.01];
}
- (void)setCursorToBeginning:(UITextView *)inView
{
//you can change first parameter in NSMakeRange to wherever you want the cursor to move
inView.selectedRange = NSMakeRange(3, 0);
}
источник: http://puppenspieler.tumblr.com/post/757819650/set-selectedrange-in-a-uitextview
Ответ 2
textView.editable = YES;
textView.selectedRange = NSMakeRange(2, 0);
Установите выбранное значение в положение с длиной 0, и вы, вероятно, также захотите, чтобы textView был доступен для редактирования, поэтому также установите значение YES.
Ответ 3
Попробуйте что-то вроде этого:
dispatch_async(dispatch_get_main_queue(), ^{
inView.selectedRange = NSMakeRange(3, 0);
});
Это приведет к тому, что selectedRange будет выполнен в основном потоке в начале следующей runloop.
Ответ 4
измените selectedRange
вашего textView. например, чтобы поместить курсор в позицию 3:
[textView setSelectedRange:NSMakeRange(3, 0)];
В вашем случае возможно добавление некоторых пробелов в содержимое textView. и observer textview
textDidChanged event
для предотвращения этого пространства будут удалены пользователем.
Ответ 5
Если вы хотите, чтобы заполнить Texview требуется или факультативно, как я. Смотрите мой хак
func textViewDidBeginEditing(textView: UITextView) {
if textView.text.isEmpty {
if self.text == "Required" || self.text == "Optional" {
dispatch_async(dispatch_get_main_queue(), {
textView.selectedRange = NSMakeRange(0, 0)
});
}
}
}
func textViewDidEndEditing(textView: UITextView) {
if CommonUtils.isEmptyString(textView.text) {
if required {
textView.text = "Required"
} else {
textView.text = "Optional"
}
textView.textColor = grayColor//
}
}
func textViewDidChange(textView: UITextView) {
if textView.text.isEmpty {
if required {
textView.text = "Required"
} else {
textView.text = "Optional"
}
textView.textColor = grayColor
textView.selectedRange = NSMakeRange(0, 0)
} else {
if required {
if textView.text.length > "Required".length {
textView.text = self.text.replace("Required", withString: "")
}
} else {
if textView.text.length > "Optional".length {
textView.text = self.text.replace("Optional", withString: "")
}
}
textView.textColor = blackColor//
}
}
Не забудьте зарегистрировать делегата: UITextViewDelegate
Ответ 6
Я использую следующее, чтобы перейти в начало textView, используя Swift 4:
DispatchQueue.main.async {
self.selectedTextRange = self.textRange(from: self.beginningOfDocument, to: self.beginningOfDocument)
}