在实际的项目开发过程中,我们经常会遇到这样的一些设计,如下图
十个App得有九个是这样的,要求点击"XXX协议",就跳转到一个协议的页面,通常我们会有两种办法去处理这样的情况:
1、懒人派:不喜欢折腾,就去用两个控件(UILabel + xxx),分别去显示前面不可点击部分和后面可点击部分。
这样很快的就搞定了,但是是真的搞定了吗?往下看,这样做会有坑的。
2、勤劳派:自己总结出一个实现方式,采用富文本+自定义显示控件的方法来一劳永逸。
好了,先说懒人派那样做的坑吧,且不说布局麻烦了(UILabel和UIButton对不齐),就说适配问题吧,假如,后面那几个字在某一宽度的手机上,正好出现换行情况怎么办?显示还得照常显示吧,点击还的照常点击吧。基本上够喝一壶了。
1、在点击范围未出现换行情况下,点击标红色字体,跳转到用户协议页面。
2、在点击范围出现换行的情况下,点击标红色字体,仍然跳转到用户协议页面。
所以,懒人一下子就燥起来了,措手不及,防不胜防!
所以,懒人们还是勤快点吧,开发过程我们还是多思考一下,一劳永逸才是懒人之道。
实现思路:使用UITextView的selectionRectsForRange方法来获取需要点击跳转部分的Rect(数组),然后重写View的touchesBegan,判断触摸点是否在Rect内,若都不在则未命中,否则,则命中。
使用富文本+自定义显示控件搞定了,使用起来特别的方便简单。代码中已经注释很清楚了,保证看一眼你就会了。此demo实现了富文本点击跳转,这一点在开发过程中,会衍生出很多应用场景,不妨自己总结一下,触类旁通。
demo的地址:https://github.com/SpringAndSummer/CoreTextJump/tree/master