IOS TTTAttributedLabel Delegate didSelectLinkWithURL не получает вызов

У меня возникают проблемы с настройкой TTTAttributedLabel в рамках моего проекта.

Я установил делегат протокола в файл заголовка

@interface TwitterFeedControlleriPad : UIViewController <TTTAttributedLabelDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateWaterfallLayout>

Я установил для него ViewController (не ноль, я уже проверил).

cell.tweetLabel.delegate = self;

Он показывает все ссылки прямо на метке, но когда я нажимаю на них, это не вызывает функцию.

- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url

Я уже использовал его с успехом, и это точно такой же код! Это сводит меня с ума!

Ответ 1

Решено! Проблема заключалась в флажке "User Interaction Enabled" в CollectionViewCell... Он был отключен! мне потребовалось 4 часа, чтобы понять это! В любом случае, спасибо!

Ответ 2

Я понимаю, что это не ваше дело, но это для всех, у кого такая же проблема, как у меня, и наткнуться на эту тему.

У меня был UITapGestureRecognizer на том же представлении, что и TTTAttributedLabel. Из-за первого, функция touchEnded 'TTTAttributedLabel не была вызвана, которая отвечает за обработку щелкнутых ссылок.

Я решил проблему, добавив строку: tapGestureRecognizer.cancelsTouchesInView = NO;

Ответ 3

По умолчанию функция UILabel userInteractionEnabled отключена, поэтому, если вы явно не включили ее, она не будет работать. Это была моя проблема.

Ответ 4

Одна из возможных причин для одной и той же проблемы (похожа на ответ 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
    }
}