美文网首页
YYKit之YYLabel

YYKit之YYLabel

作者: 低调的前行者灬 | 来源:发表于2017-11-14 16:58 被阅读0次

本文只对富文本中部分文字添加点击事件做简单介绍

1.添加点击事件

YYLabel中给部分文字添加点击事件主要是在富文本排版的时候,创建YYTextHighlight对象,设置Range,并可以可以给他赋值一个JSON字典以便在之后点击文本之后可以获取到内容(如@{@"action":@"comment"}).
设置YYTextHighlight的时候同时可以设置YYTextBorder,也就是背景颜色以及圆角等等,再点击的时候看起来不会显得空洞,有直观的反馈
设置富文本的代码如下

    NSString *showStr = @"我有一头小毛驴,从来也不骑~~";
    NSMutableAttributedString *authorSayAtt = [[NSMutableAttributedString alloc] initWithString:showStr];
    [authorSayAtt setColor:[UIColor blackColor]];
    //YYTextBorder设置点击的背景颜色,圆角
    YYTextBorder *textBoder = [YYTextBorder new];
    textBoder.insets = UIEdgeInsetsMake(0, 0, 0, 0);
    textBoder.cornerRadius = 5;
    textBoder.fillColor = UIColorFromRGB(0xd7d7d7);
    //给文字设置Highlight
    YYTextHighlight *hightLight = [YYTextHighlight new];
    [hightLight setBackgroundBorder:textBoder];
    [authorSayAtt setTextHighlight:hightLight range:[showStr rangeOfString:@"毛驴"]];
    YYTextContainer *container = [[YYTextContainer alloc] init];
    container.size = CGSizeMake(windWidth-kReaderLeftSpace*2, CGFLOAT_MAX);
    YYTextLayout *layout = [YYTextLayout layoutWithContainer:container text:authorSayAtt];
    //此处的YYTextLayout可以计算富文本的高度,他有一个属性textBoundingRect和textBoundingSize,container.size是用来限制宽度的,可以计算高度
    //YYTextLayout是用来赋值给YYLabel,相当于UILabel的attributedText
    //如果单纯的做点击处理可以用attributedText直接赋值给YYLabel,但是如果需要异步渲染就必须用YYTextLayout

然后在初始化YYLabel的地方,调用YYLabel的highlightTapAction属性就可以获取到点击的区域,文本信息等

-(YYLabel *)authorSayLabel
{
    if (!_authorSayLabel) {
        _authorSayLabel = [[YYLabel alloc] init];
        _authorSayLabel.highlightTapAction = ^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
            
            YYLabel *useLabel = (YYLabel *)containerView;
            NSAttributedString *attribute = useLabel.textLayout.text;
            if (range.location >= text.length) {
                return ;
            }
            YYTextHighlight *heightLight = [attribute attribute:YYTextHighlightAttributeName atIndex:range.location];
            NSDictionary *dic = heightLight.userInfo;
            DLog(@"携带的值===%@",dic);
            //此处的dic,就是之前设置富文本时的字典
        };
    }
    return _authorSayLabel;
}

2.关于YYLabel设置点击事件不响应的问题,主要有几个方面

(1).页面是否有其他的手势,例如UITapGestureRecognizer,如果有,需要设置其属性cancelsTouchesInView和delaysTouchesBegan都为NO
(2).YYLabel是否添加在了滑动视图上面,如果是需要设置滑动视图的属性delaysContentTouches为NO(canCancelContentTouches默认为YES,不需改动)
(3).YYLabel添加在了滑动视图上(如UIScrollVIew上),并且滑动视图上还有UITapGestureRecognizer手势,这个时候需要同时设置以上设置的三个属性,否则有一种奇怪现象,点击文字的时候如果轻点会先走UITapGestureRecognizer的方法,再走YYLabel的highlightTapAction点击事件(右或者不走),稍用力点击才能够正常先走YYLabel的highlightTapAction,再触发UITapGestureRecognizer的事件方法

相关文章

  • YYKit之YYLabel

    本文只对富文本中部分文字添加点击事件做简单介绍 1.添加点击事件 YYLabel中给部分文字添加点击事件主要是在富...

  • 2019-06-30

    YYKit 有迹可循 YYLabel -> _state == 23条(“bitfield”数据结构) YYTex...

  • YYKit框架学习之YYLabel

    一、YYLabel 强大的富文本显示功能,可根据文字的range随意添加点击事件 1 自动换行 YYLabel *...

  • YYKit 学习笔记之 YYLabel

    原文链接:https://blog.csdn.net/xu_yu_jie/article/details/9278...

  • YYKit的使用!!!

    YYLabel作者相关地址 首先附上yykit的地址 https://github.com/ibireme/YYK...

  • YYKit之YYLabel多个点击事件

    最近,因为这个Lable多个字段点击事件头疼不已,一开始用的别的第三方,最终总是Cell高度计算不准确,纠结了好久...

  • YYText源码分析

    YYText 简单介绍 YYText 是YYKit中的一个富文本显示,编辑组件,拥有YYLabel,YYText...

  • YYKit之YYText、YYLabel使用总结(更新)

    1.索引 YYText YYLabel 更新 YYText IQKeyboardManager支持 布局问题 如果...

  • YYKit--YYLabel源码分析

    一、YYLabel实现的总体思路 其实YYLabel主要就是为了实现异步绘图,提高性能,为此做了好多东西。 1、使...

  • iOS实现创建一个全局长驻队列池

    YYKit真是一个非常优秀的框架!最近看YYLabel源码,看到其中一段代码非常有意思,作者在要display l...

网友评论

      本文标题:YYKit之YYLabel

      本文链接:https://www.haomeiwen.com/subject/trsfvxtx.html