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 будут доставлены ПОСЛЕ того, что.
Но у нас не было времени проверить его до сих пор.