UItextView 高亮关键字,点击高亮字体响应点击事件

参考:

Swift - 给UITextView添加自定义链接,以及链接的点击响应

效果图
import Foundation
import UIKit

extension UITextView {

    /// 添加链接文本(链接为空时则表示普通文本),且可加大指导字符串(默认font = 13)
    ///
    /// - Parameters:
    ///   - string: 文本
    ///   - increaseStr: 需加大的字符串
    ///   - withURLString: 链接
    ///   - lineSpacing: 行间距
    func appendLinkString(string:String,
                          increaseStr:String?,
                          withURLString:String?,
                          lineSpacing:CGFloat) {
        // 原来的文本内容
        let attrString:NSMutableAttributedString = NSMutableAttributedString()
        attrString.append(self.attributedText)

        // 新增的文本内容(使用默认设置的字体样式)
        let attrs = [NSFontAttributeName : self.font!,
                     NSForegroundColorAttributeName : self.textColor ?? UIColor.black] as [String : Any]
        let appendString = NSMutableAttributedString(string: string, attributes:attrs)
        let range:NSRange = NSMakeRange(0, appendString.length)

        // 判断是否是链接文字
        if let urlStr = withURLString {
            appendString.beginEditing()
            appendString.addAttribute(NSLinkAttributeName, value:urlStr, range:range)
            appendString.endEditing()
            appendString.addAttribute(NSUnderlineStyleAttributeName, value: NSNumber.init(integerLiteral: NSUnderlineStyle.styleSingle.rawValue), range: range)
        }

        // 字体加大
        if let increase: String = increaseStr {
            let tipRange: NSRange = NSString.init(string: string).range(of:increase)
            appendString.addAttribute(NSFontAttributeName, value: UIFont.systemFont(ofSize: 13), range: tipRange)
        }

        // 调整行间距
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = lineSpacing
        appendString.addAttribute(NSParagraphStyleAttributeName,
                                  value: paragraphStyle,
                                  range: range)


        // 合并新的文本
        attrString.append(appendString)

        // 设置合并后的文本
        self.attributedText = attrString
    }
}
控制器中配置TextView调用appendLinkString函数
- (void)configTextView{
    self.textView.delegate = self;

    NSString *str0 = @"温馨提示:\n\n1.用户使用快捷充值不收取任何手续费。单笔充值限额根据各个银行上的充值限额为准,";
    NSString *str1 = @"点击查看银行限额说明";
    NSString *str2 = @"。\n";
    NSString *str3 = @"2.因为银行会在23:30到次日凌晨3:00进行系统数据处理,请尽量避免在此时间段充值。\n3.如果充值失败,请拨打客服咨询电话400-009-9595。";
    [self.textView appendLinkStringWithString:str0
                                  increaseStr:@"温馨提示"
                                withURLString:nil
                                  lineSpacing:5];

    [self.textView appendLinkStringWithString:str1
                                  increaseStr:nil
                                withURLString:@"look:bankCardLimits"
                                  lineSpacing:5];

    [self.textView appendLinkStringWithString:str2
                                  increaseStr:nil
                                withURLString:nil
                                  lineSpacing:5];

    [self.textView appendLinkStringWithString:str3
                                  increaseStr:nil
                                withURLString:nil
                                  lineSpacing:5];
}
UITextViewDelegate获取自定义链接Url,进行事件处理
#pragma mark - UITextViewDelegate
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange{
    // 查看银行卡限额
    if ([URL.scheme isEqualToString:@"look"]) {

    }
    return YES;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,200评论 4 61
  • 转载自:https://github.com/Tim9Liu9/TimLiu-iOS 目录 UI下拉刷新模糊效果A...
    袁俊亮技术博客阅读 11,956评论 9 105
  • 加了件衣服仍阻止不了身体的冷颤,我看看工作服上的三个扣子,每个相隔千万里似的,于是我把领子竖了起来。 站久了腰会疼...
    飒飒秋风爽why阅读 159评论 3 1
  • 现在的我在健身房等着上第二堂课,趁着间隙写下了今天的简书,毕竟不写是要罚钱的,哈哈 昨天写了angel老师的时间管...
    小流于江海阅读 187评论 0 0
  • 父亲的话很少。 偶尔一两句话 云淡风轻, 或者苍劲有力, 一点也不会提到自己, 父亲给我们的感觉有时很遥远。 那只...
    跳舞草阅读 279评论 0 3