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

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

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

В основном это не существует в google, и я хотел бы удалить его.

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

Ответ 1

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

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

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

Ответ 2

У меня есть четыре разных Xibs с похожими TextViews, которые также используются для заметок. Я получал те же предупреждения. Предложение отключить "Обнаруживает номера телефонов" и "Обнаружение ссылок" устраняет предупреждения. Тем не менее, я хотел, чтобы мои пользователи все еще имели возможность использовать детекторы в своих заметках.

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

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

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

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

  • Затем, используя метод -(void)textViewDidEndEditing:(UITextView *)sender { , я вернул их ВКЛ, используя: myTextView.dataDetectorTypes = UIDataDetectorTypeAll;

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


Я нашел следующее в Документах Apple по DataDetectors для UITextView: после некоторого времени играя с UITextView, надеюсь, что это поможет.

UIDataDetectorTypes:

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

Типы:

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


Обновление: 11-5-2010;

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

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

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

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

  • Для редактирования textView: 1. удалите детекторы данных, затем включите редактирование = YES.

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

Ответ 3

Итак, Wordy!

textView.editable = NO;
textView.dataDetectorTypes = UIDataDetectorTypeAll;

URL-адрес должен начинаться с "http://", иначе текстовое представление не сможет его обнаружить.

Ответ 4

Я думал о попытке использовать "Признак-Признак-Распознаватель" с "delayaysTouchesBegan = YES" и "cancelsTouchesInView = NO"

Это все еще довольно легко решить!

Загрузить вид с отключенным редактированием, а также UIDataDetectorTypeAll или типы ссылок, которые вы хотите обнаружить. Затем добавьте GestureRecognizer:

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                             action:@selector(editTextRecognizerTabbed:)];
recognizer.delegate = self;
recognizer.numberOfTapsRequired = 1;
[self.textViewNotes addGestureRecognizer:recognizer];

Итак, вы можете изменить настройки в этом методе:

- (void) editTextRecognizerTabbed:(UITapGestureRecognizer *) aRecognizer;
{
    self.textViewNotes.dataDetectorTypes = UIDataDetectorTypeNone;
    self.textViewNotes.editable = YES;
    [self.textViewNotes becomeFirstResponder];
}

И по крайней мере, вы должны изменить настройки редактирования и обнаружения после того, как пользователь завершил ввод текста:

- (void)textViewDidEndEditing:(UITextView *)textView;
{
    self.textViewNotes.editable = YES;
    self.textViewNotes.dataDetectorTypes = UIDataDetectorTypeAll;
}

работает lika a charm!

Ответ 5

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

Ответ 6

Simplenote как-то делает это на iOS 4. (Там есть бесплатная/облегченная версия, если вы хотите попробовать.)

Он действует несколько иначе: При нажатии на одну из выделенных частей он все еще запускает редактирование и не будет следовать по ссылке.

Но когда вы нажимаете и удерживаете обнаруженный dataTpye, он показывает вам меню для вызова, открывает ссылку или что-то еще.

Кроме того, при нажатии внутри текста редактирование действительно начинается в месте, которое вы прослушивали. Таким образом, они каким-то образом удаляют dataDectectors, разрешают редактирование и получают штрихи, пересылаемые в редактируемый UITextview ПОСЛЕ того, как обнаружен ответ.

Любые идеи, как это сделать?

Я думал о попытке использовать "Признак-Признак-Распознаватель" с "delayaysTouchesBegan = YES" и "cancelsTouchesInView = NO"

Поэтому я могу удалить dataConnectorTypes и установить его для редактирования по методу действия распознавателя, и, надеюсь, прикосновения к UITextview будут доставлены ПОСЛЕ того, что.

Но у нас не было времени проверить его до сих пор.