IOS富文本点击文字打开链接 特殊文字变颜色 点击文本打开链接 必须加手势

有的时候需要实现H5的效果  一段文字 特殊几个文字变颜色  并且点击文字打开H5链接。

 

 什么是富文本?

实际上就是图文混排,就是过去都是普通的文字,黑色的,大小一致,但是不能满足需求,最后通过富文本技术,给一段文字添加不同的属性,如,大小,颜色,超链接,链接图片,下划线,删除线等等,大大丰富了我们使用文字的效果。ios中的富文本专门有一个类,NSAttributedString,当然,还有一个可变的NSMutableAttributedString类。普通的lablebuttontextView等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];
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值