本文章为了方便引用YYText第三方对富文本的显示以及点击事件进行自定义,当然也可以使用自带的方法进行定制,不过自带的方法使用起来较为繁琐。例如点击事件,自带的方法我们可以选择使用一个隐藏的UIButton进行实现,也可以给文本添加链接,在链接触发的代理中进行截取操作,做出相关动作等。下面贴上代码。
//初始化所需展示字符串
NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:@"春:盼望着,盼望着,东风来了,春天的脚步近了。一切都像刚睡醒的样子,欣欣然张开了眼。山朗润起来了,水涨起来了,太阳的脸红起来了。小草偷偷地从土地里钻出来,嫩嫩的,绿绿的。"];
str.yy_font = [UIFont systemFontOfSize:17];//设置展示字符串大小
CGRect firstRect = [str boundingRectWithSize:CGSizeMake(self.view.frame.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];//计算当前所需高度
[str yy_appendString:@"查看详情->>"];//添加查看详情text
[str addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]} range:NSMakeRange(str.length - 7, 7)];//改变查看详情字体大小
[str yy_setTextHighlightRange:NSMakeRange(str.length - 7, 7) color:[UIColor blueColor] backgroundColor:[UIColor whiteColor] tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
NSLog(@"点击了");
}];//使用YYText第三方改变查看详情的颜色以及点击事件
CGRect secondRect = [str boundingRectWithSize:CGSizeMake(self.view.frame.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];//计算含有查看详情的文本高度
YYLabel * lable = [YYLabel new];//初始化一个YYLable
lable.textColor = [UIColor blackColor];
lable.numberOfLines = 0;
//对两次高度进行比较
if (secondRect.size.height > firstRect.size.height) {
lable.frame = secondRect;
[str yy_insertString:@"\n" atIndex:str.length - 7];//若第二次的大于第一次的,说明查看详情被折断或者换行显示,此时手动插入换行符
}else{
lable.frame = firstRect;
}
lable.attributedText = str;
lable.center = self.view.center;
[self.view addSubview:lable];
因为在网上找了半天,还是找不到一个能够防止最后一句“查看详情-->”加上后导致断行显示的解决方法,就自己想着用了lable高度的比较进行判断是否换行。如有不足请谅解。