Ссылка 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>
протокол?