У меня есть четыре разных Xib с похожими текстовыми представлениями, которые также используются для заметок. Я получал те же предупреждения. Предложение отключить «Обнаружение телефонных номеров» и «Обнаружение ссылок» действительно удаляет предупреждения. Однако я хотел, чтобы мои пользователи все еще имели возможность использовать детекторы в моих заметках.
Вот как я решил проблему в своем приложении:
В IB: я отменил выбор двух свойств для TextView. - (что останавливает предупреждения о сборке).
В моем - (void)viewDidLoad {
я установил следующие свойства textView:
myTextView.dataDetectorTypes = UIDataDetectorTypeAll;
, который включает детекторы данных всех типов (номера телефонов и адреса URL).
На моем контроллере просмотра: -(void)textViewDidBeginEditing:(UITextView *)sender {
метод, я повернул детекторы данных обратно OFF , используя: myTextView.dataDetectorTypes = UIDataDetectorTypeNone
Затем, воспользовавшись методом -(void)textViewDidEndEditing:(UITextView *)sender {
, я вернул их обратно ON , используя: myTextView.dataDetectorTypes = UIDataDetectorTypeAll;
Этот метод отключает детекторы данных, когда пользователь редактирует UITextView, и снова включает детекторы данных, когда пользователь заканчивает редактирование. Это исправление позволяло выбирать телефонные номера и URL из textView, чтобы я не потерял функцию.
В документах Apple по DataDetectors for UITextView я обнаружил следующее: после некоторого перебора с UITextView, надеюсь, это поможет.
UIDataDetectorTypes:
Определяет типы информации, которая может быть обнаружена в текстовом содержимом.
Типы:
- UIDataDetectorTypePhoneNumber;
- UIDataDetectorTypeLink;
- UIDataDetectorTypeNone;
- UIDataDetectorTypeAll;
Обновление: 11-5-2010;
Дополнительное примечание:
Детекторы данных недопустимы, если UITextView является «редактируемым», поскольку будет слишком много переменных, чтобы отслеживать изменения пользователя в тексте, а также попытки при попытке выполнить телефонный звонок или ссылки.
Решение:
Загрузите TextView с self.textView.editable = NO;
и установите UIDataDetector на основе типов, которые я перечислил выше. Таким образом, если пользователь хочет «выбрать» веб-адрес или номер телефона и т. Д., Делегат может справиться. Когда вам нужно, чтобы ваш пользователь отредактировал textView, включите self.textView.editing = YES;
и соответственно удалите ваши UIDataDetectors. Это должно гарантировать отсутствие ошибок или предупреждений во время компиляции.
Особое замечание:
При повторном включении обязательно сначала удалите датчики данных, затем включите «edit = YES;» ... Порядок важен, чтобы не разрешать редактирование, если UIdatadetectors все еще назначены.
Следовательно, порядок последовательности должен быть примерно таким ...
Для редактирования textView: 1. удалить детекторы данных, 2. затем включить редактирование = ДА.
Для использования DataDetectors: 1. Отключить редактирование = НЕТ; 2. затем добавьте детекторы данных.