Ссылка TTTAttributedLabel стилизована и имеет UILongPressGestureRecognizer, но не имеет UITapGestureRecognizer

В своем проекте я добавил TTTAttributedLabel к представлению в IB и добавил ссылку на него.

Я просмотрел похожие вопросы на SO (как это и это), но не повезло.

Он отображается правильно, ссылка оформлена в соответствии с ожиданиями. Но -(void)attributedLabel:didSelectLinkWithURL: не вызывается, когда я пытаюсь нажать на ссылку. Но если я использую долгое нажатие вместо -(void)attributedLabel:didLongPressLinkWithURL:atPoint: уволен, как и ожидалось. Так что я уверен, что делегат работает. Кажется, у ярлыка даже нет tapGestureRecognizer

(lldb) po label.gestureRecognizers
<__NSSingleObjectArrayI 0x60800000ee60>(
<UILongPressGestureRecognizer: 0x7f88f6c5d480; state = Began; view = <TTTAttributedLabel 0x7f88f6f8ada0>; target= <(action=longPressGestureDidFire:, target=<TTTAttributedLabel 0x7f88f6f8ada0>)>>
)

Вот код:

RFStaticAttributedLabelFormView *labelView = [RFStaticAttributedLabelFormView new];
labelView.staticLabel.userInteractionEnabled = YES;
labelView.staticLabel.delegate = self;
NSString *text = RFLocalized(@"TXT_FINES_SEARCH_FNS");
[labelView.staticLabel setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:nil];
NSRange r = [text rangeOfString:RFLocalized(@"TXT_FINES_SEARCH_FNS_LINK")];
[labelView.staticLabel addLinkToURL:[NSURL URLWithString:@"http://www.google.com"] withRange:r];

RFStaticAttributedLabelFormView - это представление, которое создается из XIB.

Не уверен, куда идти отсюда.

2 ответа

Решение

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

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

tap.cancelsTouchesInView = NO;

И ссылки в TTTAttributedLabel начали работать как надо. Надеюсь, что этот ответ поможет кому-то с подобной проблемой.

Вы реализовали метод делегата -(void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url; из <TTTAttributedLabelDelegate> протокол?

Другие вопросы по тегам