Моя проблема заключается в том, что программная установка selectedRange для UITextView выделяет текст, но не визуально указывает, что он выбран. Похоже ли это на ошибку в OS 3.0 / 3.1. Что еще более важно, какое-либо решение или предложения для получения выбора для отображения? (пример проекта связан в нижней части сообщения)
Как узнать, что он выбран, поскольку я не получаю визуальную обратную связь? Две причины:
- Нет мигающего курсора
- Нажатие любой клавиши на клавиатуре удаляет существующий текст в диапазоне выделения.
У меня есть UITextView в viewcontroller, который позволяет редактировать изменяемое пользователем значение. Контроллер редактора открывается при двойном нажатии на строку таблицы или когда пользователь нажимает кнопку раскрытия подробностей в строке. Контроллер представления прибывает через presentModalViewController, и в методе viewWillAppear VC редактора я инициирую клавиатуру с [self.textView becomeFirstResponder];
Иногда я хочу запустить редактор с выбранным содержимым всего текстового представления, чтобы пользователь мог просто начать печатать и удалить существующее содержимое (это потому, что я создаю новые элементы с заголовками по умолчанию, так что пользователь почти уверен сначала удалит все содержимое текстового поля редактора, затем напечатает их заголовок).
Некоторые из вещей, которые я уже пробовал:
- установка выбранного диапазона в viewDidAppear (вместо и в дополнение к выполнению этого в textViewDidBeginEditing).
- Замена _textView.text на копию текста в нем с последующим применением selectedRange (в textViewDidBeginEditing) ... думая, может быть, если я имею дело с ошибкой фреймворка, это может обойти ее.
[[_textView webView] selectAll];
(частный API). такое же поведение, текст выделяется без визуальной обратной связи.
- отправка _textView setNeedsDisplay и setNeedsLayout.
- с использованием executeSelector ... afterDelay, чтобы установить selectedRange так, чтобы это происходило после выхода из textViewDidBeginEditing.
ссылается на S.O.: Здесь и здесь
// UITextFieldDelegate Methods...
- (void)textViewDidBeginEditing:(UITextView *)_textView
{
NSInteger len = [_textView.text length];
if( self.selectInitialText ){
//NOTE: this is not working as expected. Indeed the text is
// selected but the highlighting of the text isn't showing.
_textView.selectedRange = NSMakeRange(0,len);
}
}
- РЕДАКТИРОВАТЬ -
Вот пример проекта, представленный в Apple BugReporter. Загрузить пример проекта BugReport_7380723
Дополнительная информация:
Во время создания и воспроизведения примера проекта я обнаружил две вещи:
Когда выделен текст, но подсветка не отображается, нажмите несколько нажатий клавиш, затем «встряхните, чтобы отменить», и исходный текст будет восстановлен , но выделен .
Если вы вручную сделаете выбор в текстовом представлении, а затем нажмите кнопку «Выбрать все» [относится к приведенному выше примеру проекта], весь текст выделен И правильно отобразит выделение.