iOS TTTAttributedLabel Delegate didSelectLinkWithURL not getting called

早过忘川 提交于 2019-12-09 08:44:35

问题


I'm having problems setting up the TTTAttributedLabel within my project.

I have set the protocol delegate in my header file

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

I have set the ViewController to it (is not nil, I checked already).

cell.tweetLabel.delegate = self;

It's showing all the links right in the label but when I tap them it's not calling the function.

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

I've already used it before with success and it's exactly the same code!! It's driving me crazy!


回答1:


I understand it is not your case, but this is for everyone who have the same problem as I had and stumble on this thread.

I had an UITapGestureRecognizer on the same view as the TTTAttributedLabel. Because of the first one, the 'touchEnded' function of the TTTAttributedLabel wasn't called, which is responsible for handling clicked links.

I solved the problem by adding the line: tapGestureRecognizer.cancelsTouchesInView = NO;




回答2:


Solved! The problem was the "User Interaction Enabled" Checkbox in the CollectionViewCell... It was disabled! it took me 4 hours to figured it out!! Thank you anyway!




回答3:


The UILabel userInteractionEnabled seems to be disabled by default, so unless you explicitly enable it, it won't work. That was my problem.




回答4:


One possible cause for the same problem (similar to Joeran's answer) is if you have a custom UITapGestureRecognizer on the view that keeps the TTTAttributedLabel's tap gesture from being called. In my case I needed to block the tap gesture's action from being called if the tap was on a link, so cancelsTouchesInView was not enough.

My solution: blocking the tap gesture from being recognized at all.

In viewDidLoad:

tapGesture.delegate = self

And below the actual implementation of my class:

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
    }
}


来源:https://stackoverflow.com/questions/17796512/ios-tttattributedlabel-delegate-didselectlinkwithurl-not-getting-called

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!