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

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

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

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

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

6 ответов


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

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

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


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

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

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

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

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

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

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


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

UIDataDetectorTypes:

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

типа:

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


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

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

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

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

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

  • Редактировать виджет TextView: 1. снять датчики данных, 2. затем включите редактирование = YES.

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


Так Многословны!

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

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


Я думал о попытке использовать распознаватель жестов с помощью "delaysTouchesBegan = YES"и" cancelsTouchesInView = NO"

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

Load view с редактируемым отключен, а также 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;
}

работает Лика Шарм!


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


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

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

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

кроме того, при нажатии внутри текста редактирование действительно начинается в том месте, где вы нажали. Поэтому они как удалить dataDectectors, возможность редактирования и получить штрихи направлены в редактируемые UITextview после нажмите признается.

есть идеи, как это сделать?

Я думал о попытке использовать распознаватель жестов с помощью "delaysTouchesBegan = YES"и" cancelsTouchesInView = NO"

поэтому я могу удалить dataConnectorTypes и установить его редактируемым в методе действия распознавателя, и надеюсь, штрихи к UITextview доставляются после что.

но до сих пор не было времени проверить это.