UITextView selectedRange не отображается при программной установке

Моя проблема в том, что программная установка selectedRange UITextView выделяет текста, но не визуально указывает, что он выбран. Похоже ли это на ошибку в OS 3. 0/3. 1. Что еще более важно, какое-либо решение или предложения для получения выбора для отображения? (образец проекта связан в нижней части сообщения)

Как узнать, что он выбран, так как я не получаю визуальную обратную связь? Две причины:

  1. Нет мигающего курсора
  2. Нажатие любой клавиши на клавиатуре удаляет существующий текст в диапазоне выделения.

У меня есть UITextView в viewcontroller, который позволяет редактировать изменяемое пользователем значение. Контроллер редактора открывается при двойном нажатии на строку таблицы или когда пользователь нажимает кнопку раскрытия подробностей в строке. Контроллер представления прибывает через presentModalViewController, и в методе viewWillAppear VC редактора я инициирую клавиатуру с [self.textView becomeFirstResponder];

Иногда мне хочется запустить редактор с выбранным содержимым всего текстового представления, чтобы пользователь мог просто начать печатать и удалить существующее содержимое (это потому, что я создаю новые элементы с заголовками по умолчанию, так что почти наверняка пользователь будет первым удалите все содержимое текстового поля редактора, затем введите их заголовок).

Некоторые из вещей, которые я уже пробовал:

  1. установка выбранного диапазона в viewDidAppear (вместо и в дополнение к выполнению этого в textViewDidBeginEditing).
  2. Замена _textView. текст с копией текста в нем, затем применяя selectedRange (в textViewDidBeginEditing). , , думая, может быть, если я имею дело с ошибкой фреймворка, это может обойти это.
  3. [[_textView webView] selectAll]; (частный API). такое же поведение, текст выделяется без визуальной обратной связи.
  4. отправка _textView setNeedsDisplay и setNeedsLayout.
  5. с использованием executeSelector. , , afterDelay, чтобы установить selectedRange так, чтобы это происходило после выхода из textViewDidBeginEditing.

ссылается на S. О. : Здесь и здесь

// 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

Дополнительная информация:

Во время создания и воспроизведения образца проекта я обнаружил две вещи:

  • Если выделен текст, но подсветка не отображается, нажмите несколько нажатий клавиш, затем «встряхните, чтобы отменить», и исходный текст будет восстановлен , но выделен .

  • Если вы вручную сделаете выделение в текстовом представлении, а затем нажмите кнопку «Выбрать все» [относится к образцу проекта, связанному выше], весь текст выделен И правильно отобразит выделение.

вопрос задан 10.11.2009
wkw
3709 репутация

4 ответов


  • 16 рейтинг

    Перед программной установкой выделения в textView просто вызовите select, чтобы визуально отобразить новый выбор. Например:

    [textView select:self];
    textView.selectedRange = newSelectedRange; 
    
    ответ дан Zac, с репутацией 215, 12.07.2010
  • 4 рейтинг

    Сейчас я отвечу на свой вопрос и обновлю его позже, когда появится больше информации (или, если кто-то найдет подходящую работу, я с радостью перенесу чек на их ответ). Я получил сообщение об ошибке в Apple, и после отправки примера кода, он сидит там с открытым статусом. Я довольно уверен, что это ошибка, поэтому, когда я получу ответ от них, я передам здесь.

    ответ дан wkw, с репутацией 3709, 15.11.2009
  • 1 рейтинг

    Внезапно встретить этот вопрос. У меня была такая же проблема, пока я не проверил заголовок объявления NSObject. Они уже предоставили функцию с именем selectAll:

    @interface NSObject(UIResponderStandardEditActions)   // these methods are not implemented in NSObject
    
    - (void)cut:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
    - (void)copy:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
    - (void)paste:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
    - (void)select:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
    - (void)selectAll:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
    - (void)delete:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2);
    
    @end
    
    ответ дан vtloc, с репутацией 101, 2.09.2010
  • 0 рейтинг

    Обходной путь. Похоже, что вам требуется функциональность заполнителя UITextView. Это, конечно, не существует. Однако здесь есть некоторые обходные пути

    ответ дан Andiih, с репутацией 9582, 10.11.2009