13

我在我的项目中设置 TTTAttributedLabel 时遇到问题。

我在头文件中设置了协议委托

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

我已经将 ViewController 设置为它(不是零,我已经检查过)。

cell.tweetLabel.delegate = self;

它在标签中显示了所有链接,但是当我点击它们时,它没有调用该函数。

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

我之前已经成功使用过它,而且代码完全相同!!这让我疯狂!

4

4 回答 4

50

我知道这不是您的情况,但这适用于与我遇到相同问题并偶然发现此线程的每个人。

UITapGestureRecognizerTTTAttributedLabel. 因为第一个,没有调用 ' touchEnded' 函数TTTAttributedLabel,它负责处理点击的链接。

我通过添加以下行解决了这个问题:tapGestureRecognizer.cancelsTouchesInView = NO;

于 2013-09-05T20:42:24.637 回答
5

解决了!问题是 CollectionViewCell 中的“启用用户交互”复选框......它被禁用了!我花了4个小时才弄明白!!还是非常感谢!

于 2013-07-23T04:18:53.987 回答
4

UILabel userInteractionEnabled似乎默认情况下是禁用的,因此除非您明确启用它,否则它将无法正常工作。那是我的问题。

于 2015-04-15T21:10:00.120 回答
3

相同问题的一个可能原因(类似于 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
    }
}
于 2017-09-15T02:09:29.380 回答