Моя проблема в том, что программная установка selectedRange UITextView выбирает текст, но не визуально указывает, что он выбран. Похоже ли это на ошибку в OS 3.0 / 3.1? Что еще более важно, какие-либо решения или предложения по отображению выбора? (пример проекта, ссылка на который находится внизу сообщения)
Как узнать, что он выбран, если я не получаю визуальной обратной связи? Две причины:
- Курсор не мигает
- Нажатие любой клавиши на клавиатуре удаляет существующий текст в диапазоне выбора.
У меня есть UITextView в контроллере просмотра, который позволяет редактировать значение, изменяемое пользователем. Контроллер редактора открывается, когда получено двойное нажатие на строку таблицы или когда пользователь нажимает кнопку раскрытия подробностей на строке. Контроллер представления поступает через PresentModalViewController, и в методе viewWillAppear редактора VC я запускаю клавиатуру с помощью [self.textView becomeFirstResponder];
Иногда я хочу запустить редактор со всем содержимым выделенного текстового представления, чтобы пользователь мог просто начать вводить текст, и он удалял существующее содержимое (это потому, что я создаю новые элементы с заголовками по умолчанию, поэтому почти наверняка пользователь сначала удалит все содержимое текстового поля редактора, затем введите их заголовок).
Некоторые вещи, которые я уже пробовал:
- установка выбранного диапазона в viewDidAppear (вместо и в дополнение к тому, чтобы делать это в textViewDidBeginEditing).
- Заменив _textView.text копией текста в нем, затем применив selectedRange (в textViewDidBeginEditing) ... подумав, может быть, если я имею дело с ошибкой фреймворка, это может обойти ее.
[[_textView webView] selectAll];
(частный API). такое же поведение, текст выделяется без визуальной обратной связи.- отправка _textView setNeedsDisplay и setNeedsLayout.
- используя performSelector ... afterDelay, чтобы установить selectedRange, чтобы это происходило после выхода из textViewDidBeginEditing.
// 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
Дополнительная информация:
Создавая образец проекта и играя с ним, я обнаружил две вещи:
Когда текст выделен, но не отображается, нажмите несколько клавиш, затем «встряхните, чтобы отменить», и исходный текст будет восстановлен, но ЕСТЬ выделен.
Если вы вручную сделаете выбор в текстовом окне, а затем нажмите кнопку «Выбрать все» [относится к образцу проекта, ссылка на который приведена выше], весь текст будет выбран И отобразит выделение правильно.