———- 如果你在开发社交相关的APP时,可能会用到富文本超链接等功能,可选的框架很多,YYKit是一个不错的选择,我在使用的过程中遇到几个小麻烦跟大家分享一下(主要是YYLabel,更高级的用法还没用到)1.子文本与父文本属性冲突(高亮点击等属性)举个栗子: “ [ 百度一下](www.baidu.com )你就知道“,这个富文本中百度一下你就知道百度一下就是父子关系,有的产品需求是点击父文本是一个效果,点击子文本是另一一个效果(反正我没有这么脑残的要求)。 然后开始码代码> [attr yy _ setTextHighlight:hi range:attr.yy _ rangeOfAll]; > [subAttr yy _ setTextHighlight:hi range:subAttr.yy _ rangeOfAll];

写完后不管你怎么试,怎样切换API(其实最后都是调用上面的方法)只有父文本的设置生效,呢为什么看下面的一段源码你就知道了在YYLabel.m中有一个私有方法 > -(YYTextHighlight )_getHighlightAtPoint:(CGPoint)点范围:(NSRangePointer)范围>其中的实现用到一个系统方法> - (可为空ID)属性:(NSAttributedStringKey)attrName atIndex:(NSUInteger)位置longestEffectiveRange:(可为空NSRangePointer )范围inRange:(NSRange)rangeLimit; NSRangePointer 范围是一个inout属性,在那个私有方法中用于获取高亮文本的范围,他有一个特点就是取最大范围(最长),这样你明白了为什么只有父文本的高亮效果生效了吧,_ highlightRange就是这样获取的,你查看在touchBegin方法的实现,会明白所有的高量范围都是以_ highlightRange作为参数推导出来的 那有什么解决方案呢,没有,因为这个需求就很反人类

2.富文本的高亮点击会同时触发标签的点击事件,比如微信朋友圈里面,点击人名就不会同时触发点击整个文本框的事件。代码如下:> YYTextHighlight * highlight = [YYTextHighlight highlightWithBackgroundColor:RGBA( 230,230,230,1)]; > highlight.tapAction = ^(UIView * _Nonnull containerView,NSAttributedString * _Nonnull text,NSRange range,CGRect rect){ NSLog(@“2222”); }; > l.textTapAction = ^(UIView * _Nonnull containerView,NSAttributedString * _Nonnull text,NSRange range,CGRect rect){ NSLog(@“dddd”); / * if(range.location == NSNotFound || [[text attributedSubstringFromRange:range] .yy_attributes.allKeys containsObject:YYTextHighlightAttributeName] == NO){ } * / };

解决方案有两种:- ?第一种如上注释部分,如果里面的代码不会触发高亮点击事件,为什么 你在调用setTextHighlight这个方法时会为attrString添加一对属性键值对,它的关键值就是YYTextHighlightAttributeName,当点击空白处(即没有文本)范围会notFount -第二种直接修改源码(有强迫症的绕过) 查看源码,你会发现,高亮点击是通过UIResponser的触摸事件实现的,且tapAction是在TouchEnd中实现的,首先粗略讲一下高亮点击的实现过程,创建的YYTextHighlight对象会存放AttrStr的各种属性,触摸事件会获取点,根据点得知你所点击的AttrStr ,然后检索对比,是不是被设置了highlight属性,如果不是highlight这个属性就会为零,因此,想要点击标签而不触发高亮点击,在_highlight为空时,调用tapAction即可, ,好简单。> if(!_state.touchMoved && _textTapAction)改为> if(! state.touchMoved && text TapAction &&! highlight)

3.第三个YYLabel设置了labelTap事件,但没有设置高亮背景色(常用),字幕:高亮颜色等如果你理解了上面的两个问题,那么这个就这么简单了。
相关代码我会上传GitHub

YYLabel的几个实用小技巧相关推荐

  1. 送你16个matplotlib绘图实用小技巧(附代码)

    来源:雪山飞猪 本文约2800字,建议阅读10分钟 本文为你分享16个matplotlib绘图实用小技巧. 标签:数据分析 1. 添加标题-title import numpy as npimport ...

  2. VC的若干实用小技巧

    Visual C++6.0(5.0)开发工具功能非常强大,但是对于初学者来说,却有很多细节的问题需要注意.作者搜集整理了以下一些实用小技巧,希望对初学者有所帮助. 1:使用vc开发项目时,常会遇到这种 ...

  3. 实用小技巧(一):UIScrollView中上下左右滚动方向的判断

    https://www.jianshu.com/p/93e8459b6dae 2017.06.01 01:13* 字数 674 阅读 1201评论 0喜欢 1 2017.06.01 01:13* 字数 ...

  4. VC的若干实用小技巧 (如何干净的删除一个类)

    Visual C++6.0(5.0)开发工具功能非常强大,但是对于初学者来说,却有很多细节的问题需要注意.作者搜集整理了以下一些实用小技巧,希望对初学者有所帮助. 1:使用vc开发项目时,常会遇到这种 ...

  5. 总结MySQL建表、查询优化实用小技巧

    MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些实用小技巧. 技巧一.数据表冗余记录添加时间与 ...

  6. mysql建表测试_总结MySQL建表、查询优化实用小技巧

    MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些实用小技巧. 技巧一.数据表冗余记录添加时间与 ...

  7. 20个你应该知道的iPhone 7实用小技巧

    听说iOS 11马上就要发布,再过几个月新版iPhone8也即将上线,你真的会用你的iPhone7了吗?下面我们来介绍几个iPhone7的实用小技巧. 1.输入消息时的光标移动: 有很多新用户在疑惑输 ...

  8. 苹果手机计算机怎样拉到桌面,20个你应该知道的iPhone 7实用小技巧

    本文由那年那个饭桶整理,未经作者授权,请勿转载,感谢您的尊重. 听说iOS11马上就要发布,再过几个月新版iPhone8也即将上线,你真的会用你的iPhone7了吗?下面我们来介绍几个iPhone7的 ...

  9. phpstudy mysql建表_MySQL_总结MySQL建表、查询优化的一些实用小技巧,MySQL建表阶段是非常重要的一 - phpStudy...

    总结MySQL建表.查询优化的一些实用小技巧 MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些 ...

最新文章

  1. 深度学习已至“瓶颈”?英特尔:数据处理是一剂良药
  2. docker-compose 安装方法
  3. 【PAT乙级】1019 数字黑洞 (20 分)
  4. Redis实现分布式Session管理
  5. 遍历Windows系统的内核模块(源码)
  6. hibernate之缓存
  7. 怎样看Linux字体所在目录,Linux下列出所有字体的目录
  8. find_element 和find_elements 的区别
  9. 3-java学习笔记
  10. codesys raspberry pi_【Pi讯早餐】2020.11.02 星期一gt;gt;
  11. VASP笔记之:计算德拜温度,杨氏模量,弹性矩阵
  12. 卡内基梅隆大学计算机硕士专业,2020年卡内基梅隆大学专业设置
  13. ES的索引(倒排索引),文档,查询
  14. Java混元功法_陈式太极心意混元 入门功法---太极内功 1
  15. Linux搭建FTP,并使用Windows和IE浏览器访问FTP服务
  16. Unity 3D 游戏编程设计g03
  17. Suricata高性能配置
  18. H.264视频中SPS/PPS缺失时实现补帧
  19. 无线互联网时代的中国移动(转)
  20. Linux命令之nc命令

热门文章

  1. 《九日集训》第四天打卡
  2. 织梦php模板在哪个文件夹,织梦主要文件夹目录及模板文件说明
  3. 硬货来了!轻松掌握 MongDB 流式聚合操作
  4. 必收藏的实用网站(一)
  5. linux14.04设置DNS,Ubuntu 16.04修改配置静态IP和DNS
  6. android 本地图片模糊,Android端图片模糊的实现原理及方案
  7. JavaScript(WebAPI) (前端)
  8. ColumnTransformer()函数
  9. 锐龙4750u和4800u的区别
  10. DICOM的理解与学习2