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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

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