利用富文本實(shí)現(xiàn) UILabel 部分高亮

需求

我們需要實(shí)現(xiàn)一個(gè)類似于下圖的功能掏缎,常見(jiàn)的是在app中查看協(xié)議之類的龙亲。

示意圖

問(wèn)題:

  • 局部高亮
  • 點(diǎn)擊后跳轉(zhuǎn)
    • 僅僅是高亮的部分作為按鍵的相應(yīng)熱區(qū) —— 似乎一些像YYLabel的第三方庫(kù)有實(shí)現(xiàn)。但是一些應(yīng)用場(chǎng)景下有咨,只將高兩部分作為熱區(qū)寒波,不容易點(diǎn)到。另外是涉及第三方庫(kù)的應(yīng)用螟凭,這里先不做討論
    • 為了增加交互,將整個(gè) UILabel的區(qū)域作為熱區(qū)它呀。
  • 文本的展示螺男,必須兼容多語(yǔ)言

實(shí)現(xiàn)思路

實(shí)際就是利用UILabelattributedText 屬性,對(duì)text的不同range做不同的富文本屬性設(shè)置

代碼

暫時(shí)只提供 swift 代碼

class ShowServiceAgreementTipView: UILabel {
    private var onCheckAgreement: () -> ()
    
    init(onCheckAgreement: @escaping OnCallbackWithNoParams) {
        self.onCheckAgreement = onCheckAgreement
        super.init(frame: CGRect.zero)
        
        let normalText = myLocal("register_equals_accept") // 語(yǔ)言國(guó)際化
        let serviceText = myLocal("service_protocol") // 語(yǔ)言國(guó)際化
        let tipText = normalText + " " + serviceText

        let wholeRange = (tipText as NSString).range(of: tipText)
        let normalRange = (tipText as NSString).range(of: normalText)
        let serviceRange = (tipText as NSString).range(of: serviceText)
        
        let tipAttributeText = NSMutableAttributedString(string: tipText)
        // 針對(duì)不同區(qū)域添加富文本屬性
        tipAttributeText.addAttribute(NSAttributedStringKey.font, value:  UIFont(),
                                      range: wholeRange)
        tipAttributeText.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor(hexString: "#999999")!,
                                      range: normalRange)
        tipAttributeText.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor(hexString: "#6F99C4")!,
                                      range: serviceRange)
        
        attributedText = tipAttributeText
        numberOfLines = 0 //設(shè)置自動(dòng)換行
        textAlignment = .center // 設(shè)置居中
        
        isUserInteractionEnabled = true // UILabel 默認(rèn)不響應(yīng)事件纵穿,這里需要另外添加
        
        let gesture = UITapGestureRecognizer(target: self, action: #selector(tapToCheckProtocol))
        addGestureRecognizer(gesture)
    }
    
    @objc private func tapToCheckProtocol() {
        onCheckAgreement()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末下隧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谓媒,更是在濱河造成了極大的恐慌淆院,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件句惯,死亡現(xiàn)場(chǎng)離奇詭異土辩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)抢野,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門拷淘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人指孤,你說(shuō)我怎么就攤上這事启涯”岫拢” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵结洼,是天一觀的道長(zhǎng)黎做。 經(jīng)常有香客問(wèn)我,道長(zhǎng)补君,這世上最難降的妖魔是什么引几? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮挽铁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敞掘。我一直安慰自己叽掘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布玖雁。 她就那樣靜靜地躺著更扁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赫冬。 梳的紋絲不亂的頭發(fā)上浓镜,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音劲厌,去河邊找鬼膛薛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛补鼻,可吹牛的內(nèi)容都是我干的哄啄。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼风范,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼咨跌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起硼婿,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锌半,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后寇漫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刊殉,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年猪腕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冗澈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陋葡,死狀恐怖亚亲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤捌归,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布肛响,位于F島的核電站,受9級(jí)特大地震影響惜索,放射性物質(zhì)發(fā)生泄漏特笋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一巾兆、第九天 我趴在偏房一處隱蔽的房頂上張望猎物。 院中可真熱鬧,春花似錦角塑、人聲如沸蔫磨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)堤如。三九已至,卻和暖如春窒朋,著一層夾襖步出監(jiān)牢的瞬間搀罢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工侥猩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留榔至,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓拭宁,卻偏偏與公主長(zhǎng)得像洛退,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杰标,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1兵怯、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,988評(píng)論 3 119
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,321評(píng)論 25 707
  • 1)從短文中學(xué)到的最重要的概念: There are times in our lives when we are...
    路雪蓮閱讀 338評(píng)論 1 0
  • 說(shuō)說(shuō)最近身體狀況媒区。 一個(gè)月前因?yàn)樽蟾觳膊煌5乃嵬矗瑢?dǎo)致不能去健身房健身了掸犬,斷斷續(xù)續(xù)休息了好幾天袜漩。 ...
    Spencer手記閱讀 463評(píng)論 0 0
  • 在運(yùn)動(dòng)中,糖和脂肪優(yōu)先利用的程度和程序是不相同的湾碎。這主要受兩個(gè)因素的影響宙攻,一是運(yùn)動(dòng)強(qiáng)度和持續(xù)時(shí)間,二是膳食介褥。同時(shí)還...
    好心音閱讀 231評(píng)論 0 0