在上篇的基础上处理:
Weex自定义WXRichText组件实践
Weex 富文本 Weex协议 Weex链接 WXRichLabel Weex Label点击事件
上篇的不足:
处理点击事件时,是写死在原生了,还是怪当时太年轻,不管是我,还是weex,用的0.13版本,现在github上都没有这个版本,可见当时坑还是有的。
所以,在此基础上此次的WXRichLabel配置更加自由,且能在js拿到点击事件自由处理,我本来想的一个数组里放可点击事件的元素,如果字号,颜色,哪些字,jsCall事件,无奈放数组里了,到iOS原生就成了一个字典,当时就无解了,后面想到要么此界面用原生,要么事件写死在原生,传入不同的type类型,显示不一样的东西,不过这样太不人性化了, 也太死板了,纯粹就是浪费生命啊。所以后面从大师那里学到了经验,用fireEvent事件发送点击处的相关信息。start end color text 等相关信息,奇妙的是你fireEvent的这个名字在js里可以直接用@他,就能接收到这个通知,太神奇了,然后在参数里,就可以拿到这些值了。
使用方法
iOS端
// AppDelegate+Weex里注册组件
[WXSDKEngine registerComponent:@"richLabel" withClass:[WXRichLabel class]];
weex端
// 画出你想要的UI
<richLabel class="richLabel" @richClick="richClick" richData="[{'start':'0','end':'5','color':'#f45762'},{'start':'6','end':'10','color':'#f45762'}]" ></richLabel>
// richLabel的点击事件
richClick: function(e) {
modal.toast({
message: "" + e.start, e.end, e.color, e.text,
duration: 1
});
}
.richLabel {
margin-top: 30;
margin-bottom: 30;
border-width: 2px;
border-style: solid;
border-color: #41b883;
width: auto;
height: 100px;
margin: 20px;
padding: 10px;
font-size: 28px;
normalcolor: #2a2a2a;
text: "我已阅读并同意《借款协议》《债权转让协议》《网络借贷风险和禁止性行为提示书》";
linespacing: 16px;
width: 690px;
}
https://github.com/songxing10000/WXRichLabel
问题:可点击文本目前只能是同一个颜色,所以我取的richData里每一个字典里的颜色作为所有可点击字的颜色。
TTTAttributedLabel里可点击的文本必须是同一个颜色,或者是我没找到设置不同点击处文字不颜色的方法,有知道的请告知,如果有。
解决方案:
一、使用YYText
可实现为特定字加特定色加特定事件
优点:兼容性好。
缺点:引用的文件太多。
二、使用UILable加上tap事件,富文件颜色,判断位置
优点:加个方法,不用导入多文件。
缺点:兼容性,适应性不够强,换行,大小,挤压等。