iOS 之富文本可点击

相信大家很多都遇到过这种情况,尤其是在登录注册界面,需要同意一个什么什么协议才能继续往下进行。而这个协议的文字是一个字符串,但是内容的颜色不同,有时候内容的字体大小也不同,而且最最重要的一点是这个字符串的一部分是可以响应事件的。

是不是?肯定不少人都遇到过这种情况。

其实,苹果公司早在ios6的时候,就有了相应的方案。。。。

算了,不啰嗦了,直接上代码吧!

1.初始化:

写了一个继承自UIView 的类,

- (instancetype)initWithFrame:(CGRect)frame{

    if (self = [super initWithFrame:frame]) {


        _textView = [[UITextView alloc]initWithFrame:self.bounds];
        _textView.delegate = self;
        _textView.editable = NO;//必须禁止输入,否则点击将会弹出输入键盘
        _textView.scrollEnabled = NO;//可选的,视具体情况而定
        [self addSubview:_textView];
    }
    return self;

}

2.赋值

声明一个属性content 为了传递文本内容,重写它的setter方法:

- (void)setContent:(NSString *)content {

    _content = content;
    NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc]initWithString:content];

    [attStr addAttribute:NSLinkAttributeName value:@"click://" range:NSMakeRange(6, 9)];
    [attStr addAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:20]} range:NSMakeRange(6, 9)];


    _textView.attributedText = attStr;

}

将值赋给了textView

3.实现协议:

要想让这段文本可点击,需要实现UITextView的一个协议方法:

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

    if ([[URL scheme] isEqualToString:@"click"]) {
        NSAttributedString *abStr = [textView.attributedText attributedSubstringFromRange:characterRange];
        if (self.eventBlock) {
            self.eventBlock(abStr);
        }

        return NO;
    }


    return YES;
}

这里我写了一个block将点击的部分对应的文字信息传出去。

4.调用

最后,在controller中调用:

 AttributeTouchLabel*label = [[AttributeTouchLabel alloc]initWithFrame:CGRectMake(10, 100, 300, 60)];
    label.content = @"您将同意《 巴拉巴拉小魔仙协议 》";
    [label returnWithBlock:^(NSAttributedString *abStr) {

        NSLog(@"%@",abStr);
    }];
    [self.view addSubview:label];

附上效果图:

这里写图片描述

这里的蓝色部分是可以响应事件的!点击后打印的结果:

2017-03-23 16:27:41.749 AttributedStringClick[29792:1371671] 巴拉巴拉小魔仙协议{
    NSColor = "UIExtendedSRGBColorSpace 1 0.5 0 1";
    NSFont = "<UICTFont: 0x7fc34fd0ee10> font-family: \".PingFangSC-Regular\"; font-weight: normal; font-style: normal; font-size: 20.00pt";
    NSLink = "click://";
    NSOriginalFont = "<UICTFont: 0x7fc34fe07cc0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 12.00pt";
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值