iOS 通过TextView富文本给文字添加点击事件

本文介绍了如何在iOS应用中使用attributedText属性创建链接,以展示《[appName]隐私政策》和《服务协议》,并实现点击链接跳转到相应内容。通过`textView:shouldInteractWithURL:`方法处理用户点击行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UITextView *protocolTV = [[UITextView alloc]initWithFrame:CGRectMake(50,200, 200, 100)];

//    protocolTV.frame = CGRectMake(15, 15, SCREEN_WIDTH - 30, 40);

    protocolTV.editable = NO;

    protocolTV.delegate = self;

    protocolTV.textContainer.lineFragmentPadding = 0.0;

    protocolTV.textContainerInset = UIEdgeInsetsMake(15, 0, 0,  0);

    protocolTV.linkTextAttributes = @{NSForegroundColorAttributeName:[UIColor blueColor]};

    [self.view addSubview:protocolTV];

    NSString *appName = [NSBundle mainBundle].infoDictionary[@"CFBundleDisplayName"];

    NSString *rangeStr = [NSString stringWithFormat:@"这是我们要遵循的《%@隐私政策》",appName];

    NSString *protocolStr = [NSString stringWithFormat:@"阅读并同意%@",rangeStr];

    NSString *serverce= [NSString stringWithFormat:@"《服务协议》"];

    NSRange privacyRange = [protocolStr rangeOfString:rangeStr];

    NSString *preStr = [NSString stringWithFormat:@"这是我们要遵循的"];

    NSMutableAttributedString *privacy = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@"%@%@",preStr,protocolStr] attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20],NSForegroundColorAttributeName:[UIColor blueColor]}];

    NSRange range = [rangeStr rangeOfString:preStr];

    [privacy setAttributes:@{NSForegroundColorAttributeName:[UIColor blackColor],NSFontAttributeName:[UIFont systemFontOfSize:20]} range:[rangeStr rangeOfString:preStr]];

    [privacy addAttribute:NSLinkAttributeName value:@"privacy://" range:privacyRange];

   

   

    NSMutableAttributedString *servercePrivacy = [[NSMutableAttributedString alloc]initWithString:serverce attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20.0],NSForegroundColorAttributeName:[UIColor blueColor]}];

    NSRange serverceRange = [serverce rangeOfString:serverce];

    [servercePrivacy addAttribute:NSLinkAttributeName value:@"serverce://" range:serverceRange];

    [privacy appendAttributedString:servercePrivacy];

    protocolTV.attributedText = privacy;

    [self.view addSubview:protocolTV];

 

 

-(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(nonnull NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction{

    if ([URL.scheme isEqualToString:@"privacy"]) {

        NSLog(@"点击了隐私协议");

    }else if ([URL.scheme isEqualToString:@"serverce"]){

        NSLog(@"点击了服务协议");

    }

    return YES;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值