Ответ 1
Решено! Проблема заключалась в флажке "User Interaction Enabled" в CollectionViewCell... Он был отключен! мне потребовалось 4 часа, чтобы понять это! В любом случае, спасибо!
У меня возникают проблемы с настройкой TTTAttributedLabel в рамках моего проекта.
Я установил делегат протокола в файл заголовка
@interface TwitterFeedControlleriPad : UIViewController <TTTAttributedLabelDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateWaterfallLayout>
Я установил для него ViewController (не ноль, я уже проверил).
cell.tweetLabel.delegate = self;
Он показывает все ссылки прямо на метке, но когда я нажимаю на них, это не вызывает функцию.
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url
Я уже использовал его с успехом, и это точно такой же код! Это сводит меня с ума!
Решено! Проблема заключалась в флажке "User Interaction Enabled" в CollectionViewCell... Он был отключен! мне потребовалось 4 часа, чтобы понять это! В любом случае, спасибо!
Я понимаю, что это не ваше дело, но это для всех, у кого такая же проблема, как у меня, и наткнуться на эту тему.
У меня был UITapGestureRecognizer
на том же представлении, что и TTTAttributedLabel
. Из-за первого, функция touchEnded
'TTTAttributedLabel
не была вызвана, которая отвечает за обработку щелкнутых ссылок.
Я решил проблему, добавив строку: tapGestureRecognizer.cancelsTouchesInView = NO;
По умолчанию функция UILabel
userInteractionEnabled
отключена, поэтому, если вы явно не включили ее, она не будет работать. Это была моя проблема.
Одна из возможных причин для одной и той же проблемы (похожа на ответ Joeran) заключается в том, что у вас есть пользовательский UITapGestureRecognizer
в представлении, который удерживает жгут тега TTTAttributedLabel
. В моем случае мне нужно было заблокировать действие жестового нажатия, если он был нажат на ссылку, поэтому cancelsTouchesInView
было недостаточно.
Мое решение: блокировка жестов кран от распознавания вообще.
В viewDidLoad
:
tapGesture.delegate = self
И ниже фактической реализации моего класса:
extension MyView: UIGestureRecognizerDelegate {
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if gestureRecognizer == self.tapGesture {
let view = gestureRecognizer.view
let location = gestureRecognizer.location(in: view)
let subview = view?.hitTest(location, with: nil)
// test if the tap was in a TTTAttributedLabel AND on a link
if let ttt = subview as? TTTAttributedLabel, ttt.link(at: gestureRecognizer.location(in: ttt)) != nil {
return false
}
}
//else
return true
}
}