TTTAttributedLabel links are being styled but not clickable

后端 未结 2 1389
抹茶落季
抹茶落季 2020-12-31 20:48

I\'ve been looking into a solution to getting clickable links working. I can get this working when using UITextView + NSAttributedString but it just doesn\'t autolayout prop

相关标签:
2条回答
  • 2020-12-31 21:12

    Aaron Brager is correct! I used to have the same problem, but I got it fixed in Swift by replacing the line:

    label.attributedText = attributedString
    

    with the line:

    label.setText(attributedString)
    

    This is accepted by the compiler because the setText method accepts AnyObject. I also increased the font of the attributed string of the link so it captures my tap and it is working now! I used this for the truncation link, this is the whole part:

    label.lineBreakMode = .ByTruncatingHead
    label.attributedTruncationToken = NSMutableAttributedString(string: "... Show more", attributes: [NSForegroundColorAttributeName: UIColor.cueCyan(), NSLinkAttributeName: readMoreLink, NSFontAttributeName: UIFont.formFont(.Light, size: fontSize+24)!])
    label.userInteractionEnabled = true
    label.delegate = self
    
    0 讨论(0)
  • 2020-12-31 21:32

    The implementation of setAttributedText: doesn't update the linkModels array, while the implementation of setText: does. I believe this is what causes your issue.

    To resolve, set the label's text property instead of the attributedText property.

    The docs also include this warning:

    TTTAttributedLabel can display both plain and attributed text: just pass an NSString or NSAttributedString to the setText: setter. Never assign to the attributedText property.

    The docs also show this example usage:

    TTTAttributedLabel *attributedLabel = [[TTTAttributedLabel alloc] initWithFrame:CGRectZero];
    
    NSAttributedString *attString = [[NSAttributedString alloc] initWithString:@"Tom Bombadil"
                                                                    attributes:@{
            (id)kCTForegroundColorAttributeName : (id)[UIColor redColor].CGColor,
            NSFontAttributeName : [UIFont boldSystemFontOfSize:16],
            NSKernAttributeName : [NSNull null],
            (id)kTTTBackgroundFillColorAttributeName : (id)[UIColor greenColor].CGColor
    }];
    
    // The attributed string is directly set, without inheriting any other text
    // properties of the label.
    attributedLabel.text = attString;
    
    0 讨论(0)
提交回复
热议问题