有的时候需要实现H5的效果 一段文字 特殊几个文字变颜色 并且点击文字打开H5链接。
什么是富文本?
实际上就是图文混排,就是过去都是普通的文字,黑色的,大小一致,但是不能满足需求,最后通过富文本技术,给一段文字添加不同的属性,如,大小,颜色,超链接,链接图片,下划线,删除线等等,大大丰富了我们使用文字的效果。ios中的富文本专门有一个类,NSAttributedString
,当然,还有一个可变的NSMutableAttributedString
类。普通的lable
,button
,textView
等UI控件都有text
这个属性显示普通文本,如果要去显示富文本,要使用他们的attributedText
这个属性赋值,如果你使用了lable.text = attriText
,保证不会显示
上代码
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"我们依据最新法律法规及监管政策要求,更新了《隐私政策》和《用户协议》,特此向您推送本提示。 \n\n请您务必仔细阅读并透彻理解相关条款内容,在确认充分理解并同意后使用蜜蜂停车相关产品和服务。点击同意即代表您已阅读并同意《隐私政策》和《用户协议》。 \n\n我们将按照法律法规要求,采取相应安全保护措施,尽力保护您的个人信息安全可控。"];
[attributedString addAttribute:NSLinkAttributeName
value:@"yinsixieyi://"
range:[[attributedString string] rangeOfString:@"《隐私政策》"]];
[attributedString addAttribute:NSLinkAttributeName
value:@"yonghuxieyi://"
range:[[attributedString string] rangeOfString:@"《用户协议》"]];
NSRange range2 = {109, 6};
NSRange range3 = {116, 6};
[attributedString addAttribute:NSLinkAttributeName
value:@"yinsixieyi://"
range:range2];
[attributedString addAttribute:NSLinkAttributeName
value:@"yonghuxieyi://"
range: range3];
[attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:font1] range:NSMakeRange(0, attributedString.length)];
self.TextView.attributedText = attributedString;
self.TextView.linkTextAttributes = @{NSForegroundColorAttributeName: [UIColor getColorWithHex:kYellowTextColor] };
self.TextView.editable = NO; //必须禁止输入,否则点击将弹出输入键盘
self.TextView.scrollEnabled = NO;
self.TextView.selectable = NO;
self.TextView.delegate = self;
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(addGestureRecognizer:)];
[self.TextView addGestureRecognizer:tapRecognizer];
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange{
if ([(NSString *)URL containsString:@"yinsixieyi"]) {
return NO;
} else if ([(NSString *)URL containsString:@"yonghuxieyi"]) {
return NO;
}
return YES;
}
-(void)addGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer{
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]])
{
CGPoint tapLocation = [gestureRecognizer locationInView:self.alertTextView];
UITextPosition *textPosition = [self.alertTextView closestPositionToPoint:tapLocation];
NSDictionary *attributes = [self.alertTextView textStylingAtPosition:textPosition inDirection:UITextStorageDirectionBackward];
NSURL *url = attributes[NSLinkAttributeName];
if(url) {
NSRange range = [self.alertTextView.text rangeOfString:@"《隐私政策》"];
if (([url isKindOfClass:[NSString class]] && [(NSString *)url containsString:@"yinsixieyi"]) || (([url isKindOfClass:[NSURL class]] && [[url scheme] containsString:@"yinsixieyi"]))) {
range = [self.alertTextView.text rangeOfString:@"《隐私政策》"];
} else if(([url isKindOfClass:[NSString class]] && [(NSString *)url containsString:@"yonghuxieyi"]) || (([url isKindOfClass:[NSURL class]] && [[url scheme] containsString:@"yonghuxieyi"]))){
range = [self.alertTextView.text rangeOfString:@"《用户协议》"];
}
//[self removeFromSuperview];
//[self textView:self.alertTextView shouldInteractWithURL:url inRange:range];
[self textView:self.alertTextView shouldInteractWithURL:url inRange:range];
}
}
[super addGestureRecognizer:gestureRecognizer];
}