iphone UITextView не поддерживает детекторы данных, когда текстовое представление доступно для редактирования

Я получаю интересное предупреждение во время изготовления (средство моделирования iPhone), который дает следующее:

EditView.xib:35:0 UITextView does not support data detectors when the text view is editable.

Это является в основном не существующим на Google, и я хотел бы удалить его.

Мой editview.xib имеет textview, где я пишу записки в него. Есть ли еще информация, которая необходима?

11
задан Sam 27 June 2014 в 19:53
поделиться

3 ответа

Я тоже видел это предупреждение. Вот как я это исправил:

В xib файле в Interface Builder выберите текстовый вид и вызовите инспектор атрибутов. Убедитесь, что "Обнаруживает номера телефонов" и "Обнаруживает ссылки" являются UNCHECKED.

Я проверил "Обнаруживает связи", и оказалось, что именно это и было причиной предупреждения. В основном, если текстовый просмотр редактируемый, вы не хотите, чтобы эти функции автоматического обнаружения были включены.

7
ответ дан 3 December 2019 в 04:32
поделиться

Детекторы данных для UITExtView будут для копирования и вставки. Поскольку вы устанавливаете его как редактируемые, копия / паста не допускается, где вы думаете, что должна быть, но копия не должна.

0
ответ дан 3 December 2019 в 04:32
поделиться

У меня есть четыре разных Xib с похожими TextView, которые также используются для заметок. Я получал такие же предупреждения. Предложение отключить «Обнаружение телефонных номеров» и «Обнаружение ссылок» действительно удаляет предупреждения. Однако я хотел, чтобы у моих пользователей по-прежнему была возможность использовать детекторы в моих заметках.

Вот как я решил проблему в моем приложении:

  1. В IB: я отменил выбор двух свойств для TextView. - (который останавливает предупреждения сборки).

  2. В моем - (void) viewDidLoad { я установил следующие свойства textView: myTextView.dataDetectorTypes = UIDataDetectorTypeAll; , который включает детекторы данных всех типов (номера телефонов и url-адреса).

  3. В моем контроллере представления: - (void) textViewDidBeginEditing: (UITextView *) sender { метод, я выключил детекторы данных OFF , используя: myTextView.dataDetectorTypes = UIDataDetectorTypeNone

  4. Затем, воспользовавшись методом - (void) textViewDidEndEditing: (UITextView *) sender { , я снова включил ON using: myTextView.dataDetectorTypes = UIDataDetectorTypeAll;

Этот метод отключает детекторы данных, когда пользователь редактирует UITextView, и снова включает детекторы данных, когда пользователь заканчивает редактирование. Это исправление позволило выбрать телефонные номера и URL-адрес из textView, так что я не потерял эту функцию.


В документации Apple по DataDetectors для UITextView я обнаружил следующее: после некоторого эксперимента с UITextView, надеюсь, это поможет.

UIDataDetectorTypes:

Определяет типы информации, которая может быть обнаружена в текстовом содержимом.

Типы:

  • UIDataDetectorTypePhoneNumber;
  • UIDataDetectorTypeLink;
  • UIDataDetectorTypeNone;
  • UIDataDetectorTypeAll;


Обновление: 5.11.2010;

Дополнительное примечание: Детекторы данных не разрешены, если UITextView имеет значение «Редактируемый», потому что было бы слишком много переменных для отслеживания изменений текста пользователями, как а также касания при попытке выполнить телефонный звонок или ссылки.

Решение: Загрузите TextView с помощью self.textView.editable = NO; и установите UIDataDetector на основе перечисленных выше типов. Таким образом, если пользователь хочет «выбрать» веб-адрес или номер телефона и т. Д., Делегат сможет справиться. Если вам нужно, чтобы ваш пользователь отредактировал textView, включите self.textView.editing = YES; и соответственно удалите UIDataDetectors. Это должно гарантировать отсутствие ошибок или предупреждений во время компиляции.

Особое внимание: Обязательно сначала удалите детекторы данных при повторном включении, затем включите "редактирование = ДА;" ... Порядок важен: нет, чтобы разрешить редактирование, если детекторы UIdata все еще назначены .

Следовательно, порядок следования должен быть примерно таким ...

  • Для редактирования textView: 1. удалить детекторы данных, 2. затем разрешить редактирование = ДА.

  • Использование DataDetectors: 1. Отключить редактирование = НЕТ; 2. затем добавьте детекторы данных.

9
ответ дан 3 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: