Обнаружение ссылок UITextView в iOS 7
У меня есть UITextView
, который управляется через Interface Builder. В качестве обнаружения данных у меня есть "Ссылки". В iOS 6 все работает нормально, а ссылки выделены и доступны для просмотра. Однако в iOS 7 все ссылки остаются просто текстовыми. Измененные и выбираемые флажки не отмечены.
Что может быть опасно, так это то, что UITextView
является подзором представления контейнера, который снова находится внутри UIScrollView
.
Ответы
Ответ 1
Похоже, что в iOS 7 обнаружение ссылок работает только при выборе UITextView
. Поэтому, чтобы мой UITextView
не был выбран, остановилось обнаружение ссылки.
Я также тестировал это в iOS 6, и я могу подтвердить, что в iOS 6 обнаружение ссылок работает нормально даже при невозможности выбора UITextView
.
Ответ 2
У меня были проблемы с обнаружением телефонных номеров сегодня. Казалось, что UITextView сохранит старые телефонные номера и сохранит текст выделенным после того, как я установил текст на что-то еще.
Я обнаружил, что если setText: nil перед установкой текста в новую строку, это будет reset textview, а номера телефонов будут выделяться как обычно. Мне интересно, если это какая-то ошибка с UITextView в iOS 7.0
В любом случае, это работало для меня.
Ответ 3
Когда iOS7 впервые вышел, это преследовало меня, и я нашел ответ в этом потоке (установив атрибут текста UITextView в ноль, прежде чем устанавливать фактическое значение, сделал трюк). Затем неожиданно проблема (для меня была выделена вся строка, выделенная как ссылка), обрезанная резервная копия (предположительно из-за обновления iOS).
Что, в конце концов, сделало трюк для меня, чтобы прекратить использование текстового атрибута и установить атрибутText. Как только я это сделал, необходимо установить шрифты/прокрутку/выбор/редактирование/etc. программно, исчез. Я определил свой UITextView в IB, задал значения, которые я хотел (не прокручиваемые, не редактируемые, не выбираемые, не обнаруживая ссылки и номера телефонов), а затем построил атрибутную строку и установил:
myUITextView.attributedString = myAttributedString;
И вдруг все сработало, как ожидалось. Надеюсь, это поможет кому-то еще по дороге.
Ответ 4
У меня была такая же проблема, и отключение прокрутки в UITextView активирует обнаружение ссылок при загрузке, а не только после того, как пользователь взаимодействует с текстовым просмотром. UITextView также должен был быть выбран и не редактироваться.
detailTextView.scrollEnabled = NO;
detailTextView.editable = NO;
detailTextView.selectable = YES;
Возможность выбора или наличия прокрутки в iOS6 не требуется.
Еще одна вещь, которую нужно проверить, заключается в том, что пользовательское взаимодействие включено в представлении ячейки и содержимого ячейки, иначе ссылка не будет доступна для кликов.
Ответ 5
Проверить, чтобы эти строки были добавлены для использования свойства детектора данных textview
в ячейке UItableView
.
txtvwMsgText.userInteractionEnabled = YES;
txtvwMsgText.dataDetectorTypes = UIDataDetectorTypeLink;
txtvwMsgText.scrollEnabled = NO;
txtvwMsgText.editable = NO;
txtvwMsgText.selectable = YES;
Ответ 6
Вы должны проверить NSDataDetector
.
Вы можете использовать это, чтобы находить и обрабатывать разные данные (ссылки, номера телефонов и т.д.). Посмотрите на этом сайте:
http://nshipster.com/nsdatadetector/
Вы также можете использовать свойство dataDetectorTypes
UITextView
, чтобы указать, что вы хотите обнаружить в коде. Может быть, это просто проблема перехода с раскадровки.
textView.dataDetectorTypes = UIDataDetectorTypeLink;
Ответ 7
Помните, что ваше текстовое представление будет распознавать ссылки только в том случае, если не редактируется!
Вот хороший учебник о том, как сделать editable UITextView
с `link detection``
Редактируемый UITextView с привязкой ссылок
С тех пор я не испытывал никаких проблем с этим решением.
Трюк - это GestureRecognizer для создания и устранения/отключения редактирования.
Вы можете применить одно и то же к проблеме selectable / not selectable
на iOS7
Ответ 8
После нескольких тестов я нашел решение.
Если вы хотите, чтобы ссылки активны, и вы не включили выделение, вам необходимо изменить gestureRecognizers.
Например, есть 3 указателя LongPressGestureRecognizers. Один для клика по ссылке (minimumPressDuration = 0.12), второй для увеличения редактируемого режима (минимумPressDuration = 0,5), третий для выбора (минимумPressDuration = 0,8). Это решение удаляет LongPressGestureRecognizer для выбора и второго для масштабирования в режиме редактирования.
NSArray *textViewGestureRecognizers = self.captionTextView.gestureRecognizers;
NSMutableArray *mutableArrayOfGestureRecognizers = [[NSMutableArray alloc] init];
for (UIGestureRecognizer *gestureRecognizer in textViewGestureRecognizers) {
if (![gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {
[mutableArrayOfGestureRecognizers addObject:gestureRecognizer];
} else {
UILongPressGestureRecognizer *longPressGestureRecognizer = (UILongPressGestureRecognizer *)gestureRecognizer;
if (longPressGestureRecognizer.minimumPressDuration < 0.3) {
[mutableArrayOfGestureRecognizers addObject:gestureRecognizer];
}
}
}
self.captionTextView.gestureRecognizers = mutableArrayOfGestureRecognizers;
Протестировано на iOS 9, но оно должно работать на всех версиях (iOS 7, 8, 9).
Я надеюсь, что это помогает!:)
Ответ 9
Я нашел трюк, это работает в iOS 7!
Вы должны установить UITextView для выбора в xib или программно
self.yourTextView.selectable = YES;
после чего вам нужно отключить прокрутки и снова включить после установки текста.
self.yourTextView.scrollEnabled = NO;
[self.yourTextView setText:contentString];
self.yourTextView.scrollEnabled = YES;
Ответ 10
Таким образом, используя UITextView, поддерживая его, можно выбирать, а не прокручивать и обнаруживать ссылки не так просто, как кажется. Я столкнулся с этим в iOS 8. Поэтому мое решение состояло в том, чтобы сделать что-то подобное в viewDidLoad, а затем установить редактируемое свойство NO, когда будет выполнено редактирование текстового редактора (обычно это будет метод, подобный doneIsTapped). Трюк здесь заключается в том, чтобы установить редактируемое свойство NO после установки текстового значения в textview. Это позволит использовать ссылки в UITextview.
- (void)viewDidLoad
{
[super viewDidLoad];
self.txtViewComment.editable = YES;
self.txtViewComment.selectable = YES;
self.txtViewComment.dataDetectorTypes = UIDataDetectorTypeLink;
self.txtViewComment.scrollEnabled = NO;
}
и
- (IBAction)doneIsTapped:(id)sender
{
self.txtViewComment.text = @"set text what ever you want";
self.txtViewComment.editable = NO;
}
это сделало ссылки включенными в textview. Также я бы рекомендовал не использовать доску истории в это время (или пока Apple не решит эту проблему) и просто используйте код, чтобы избежать лишней путаницы. Надеюсь, эта помощь.
Ответ 11
Дезактивация способности прокрутки UITextViews сделала трюк для меня в аналогичной настройке.
Ответ 12
На самом деле работает изменение цвета оттенка на другой цвет.
Однако, если выбрано, включение оттенка также будет одного цвета.
Ответ 13
Сделайте свойство прокрутки UITextView равным №, это будет работать...
Self.textView.ScrollingEnable = НЕТ;
Ответ 14
Это обходное решение работает для меня:
textView.selectable = YES;
textView.delegate = self;
- (void) textViewDidChangeSelection:(UITextView *)textView;
{
NSRange range = NSMakeRange(NSNotFound, 0.0);
if ( range.length && !NSEqualRanges(range, textView.selectedRange) ) {
textView.selectedRange = range;
}
}
Ответ 15
Если вы добавляете UITextview программно, просто добавляйте ниже строки:
_textView.userInteractionEnabled = YES;
_textView.dataDetectorTypes = UIDataDetectorTypeLink;
_textView.scrollEnabled = NO;
_textView.editable = NO;
Это сработало для меня.
Ответ 16
Ни одно из вышеперечисленных не работало для меня, вместо этого я сделал это:
[self.textView setDataDetectorTypes:UIDataDetectorTypeNone];
[self.textView.setTextColor:[UIColor whiteColor]];
[self.textView setDataDetectorTypes:UIDataDetectorTypeNone];
Я сделал это с моим текстовым представлением, которое должно было обнаружить все типы, и у которого не обнаружен цвет, установленный на белый. Вы можете изменить код, чтобы представить свой правильный цвет и типы ссылок для обнаружения.
Ответ 17
Пока эта ветка устарела, я не видел ответа, который работал у меня с Swift, поэтому здесь идет речь о Swift 2.2
textView.dataDetectorTypes = UIDataDetectorTypes.Link
textView.selectable = true