您的位置:首页 > 移动开发 > IOS开发

使用YYText-文本蓝色文字点击实现超链接跳转

2016-07-31 11:16 3107 查看
我们经常在注册账号的时候会看到相关的我们注册该账号要遵循的某个协议,一般是蓝色文字标记出来。比如这样:




             

对于这种可以拼接Label,添加一个手势,也可以放置Button来实现,但是有时候总感觉不是很好,我认为它应该是一个整体,我们只是对文本中某段文字进行了处理而已,所以基于这个初衷,也有了今天要说的这个事儿。也许我们会碰到这样的需求:



文本中两处文字都被颜色标记出来了,在实际业务中我们假想这就是两个注册账号时要遵循的协议,都是可以点击跳转到具体协议内容的,那么在这里放置控件来拼接,似乎就不行了。

好吧,言归正传,直接说我们今天要做的事吧。

YYText是YYKit开源库中的一个关于富文本的库,里面对于富文本编辑、排版做了相当多的更适合我们便捷使用的处理,详情可以去github上下载demo学习,这里我就学习使用了这个关于标记文字点击处理的东西。

下载并导入该库,在要使用的vc中引入头文件:

#import "YYText.h"

具体代码请看:

NSString *text = @"唐寅,生于成化六年二月初四,卒于嘉靖二年十二月二日,字伯虎,后改字子畏,号六如居士、桃花庵主、鲁国唐生、逃禅仙吏等,明代画家、书法家、诗人。";

NSMutableAttributedString *one = [[NSMutableAttributedString alloc] initWithString: text];

/**
*  设置整段文本size
*/
//        one.yy_font = [UIFont boldSystemFontOfSize:30];

/**
*  设置整段文本下划线
*/
//        one.yy_underlineStyle = NSUnderlineStyleSingle;

/**
*  获得range, 只设置标记文字的size、下划线
*/
NSRange range = [text rangeOfString:@"字伯虎"];
[one yy_setTextUnderline:[YYTextDecoration decorationWithStyle:YYTextLineStyleSingle] range:range];
[one yy_setFont:[UIFont boldSystemFontOfSize:30] range:range];

/**
*  被标记的文字颜色
*/
UIColor *textColor = [UIColor colorWithRed:0.093 green:0.492 blue:1.000 alpha:1.000];

/**
*  被标记文字点中后的背景颜色,会闪现一下
*/
//    UIColor *tapedBackgroundColor = [UIColor colorWithWhite:0.000 alpha:0.220];

/**
*  标记文字点击事件
*/
[one yy_setTextHighlightRange:range color:textColor backgroundColor:nil tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {

// 点击就是跳转超链接了,在这里我输出标记文字
[self showMessage:[NSString stringWithFormat:@"%@, 字体大小: 30", [text.string substringWithRange:range]]];

}];

// 再标记一段文字
NSRange otherRange = [text rangeOfString:@"桃花庵主"];
[one yy_setFont:[UIFont boldSystemFontOfSize:20] range:otherRange];

[one yy_setTextHighlightRange:otherRange color:[UIColor orangeColor] backgroundColor:nil tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {

[self showMessage:[NSString stringWithFormat:@"%@, 字体大小: 20", [text.string substringWithRange:otherRange]]];

NSLog(@"dic: %@", [text yy_fontAtIndex:otherRange.location]);
}];


接下来对文本进行展示,这里注意YYLabel并不是继承自UILabel,而是UIView:

YYLabel *label = [[YYLabel alloc] init];
label.attributedText = one;
label.frame = CGRectMake(20, 200, self.view.frame.size.width-40, 200);
label.textAlignment = NSTextAlignmentCenter;
label.textVerticalAlignment = YYTextVerticalAlignmentCenter;
label.numberOfLines = 0;
label.backgroundColor = [UIColor colorWithWhite:0.933 alpha:1.000];
[self.view addSubview:label];


不出意外的话运行应该就是我们上图那种效果了,点击事件效果:



     



此外,有一个小问题待解决,我输出的时候是直接传入的文字大小,我试过在block中获取返回的text的UIFont,在代码片中:

[text yy_fontAtIndex:otherRange.location]
是可以获取一个UICTFont:



这里返回的是一个UIFont,并不是dic,so, 我不知道怎么从中"font-size"获取这段文本的字体大小,如果您知道,请您赐教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐