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 удаляет предупреждения. Тем не менее, я хотел, чтобы мои пользователи все еще имели возможность использовать детекторы в моих заметках.
вот как я решил проблему в мое приложение:
в IB: я отменил выбор двух свойств для Поле TextView. - (который останавливает предупреждения сборки).
в своем
- (void)viewDidLoad {
Я установил свойства textView следующим образом:myTextView.dataDetectorTypes = UIDataDetectorTypeAll;
который включает детекторы данных всех типов (номера телефонов и url-адреса).на мой взгляд контроллера:
-(void)textViewDidBeginEditing:(UITextView *)sender {
метод, я повернул детекторы данных назад выкл использование:myTextView.dataDetectorTypes = UIDataDetectorTypeNone
затем воспользовавшись
-(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 доставляются после что.
но до сих пор не было времени проверить это.