iOS 利用NSMutableAttributedString為UITextView/UITextField添加富文本,同時對添加的富文本可作為一個整體刪除

在iOS開發(fā)中咽白,經(jīng)常需要對一段文本的特殊文字顯示不同的顏色啤握,比如在發(fā)朋友圈時@某人時要把這個人高亮,同時點擊刪除按鈕這個人的名字要一起刪除而不是一個字一個字刪晶框,筆者公司目前開發(fā)的發(fā)表周報排抬,日報功能就遇到這方面的需求,現(xiàn)總結(jié)如下:
UITextView/UITextField/UILabel有一個屬性叫:attributedText授段,該屬性為NSAttributedString類型蹲蒲,該類的作用是可以為一段文本的不同rang的字體設(shè)置不同的大小,顏色侵贵,等届搁。可以利用該類實現(xiàn)富文本窍育,通常我們使用它的可變類型NSMutableAttributedString實現(xiàn)咖祭。

NSMutableAttributedString具有如下幾個方法:

//為某一范圍內(nèi)文字設(shè)置多個屬性 
setAttributes: range: 
//為某一范圍內(nèi)文字添加某個屬性 
addAttribute: value: range: 
//為某一范圍內(nèi)文字添加多個屬性 
addAttributes: range: 
//移除某范圍內(nèi)的某個屬性 
removeAttribute: range:

NSMutableAttributedString的幾個常見屬性:

NSFontAttributeName 
字體
NSParagraphStyleAttributeName 
段落格式 
NSForegroundColorAttributeName 
字體顏色
NSBackgroundColorAttributeName  
背景顏色
NSStrikethroughStyleAttributeName
刪除線格式
NSUnderlineStyleAttributeName     
下劃線格式
NSStrokeColorAttributeName       
刪除線顏色
NSStrokeWidthAttributeName
刪除線寬度
NSShadowAttributeName 
陰影

下面進行簡單的應(yīng)用:
1.初始化一個UITextView。

        let string = "今日主要工作:完成NSMutableAttributedString學(xué)習蔫骂,@點點"
        //UITextView初始化
        textView = UITextView()
        textView?.delegate = self
        textView?.alwaysBounceVertical = true
        textView?.font = UIFont.systemFont(ofSize: 14)
        textView?.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 200)
        textView?.text = string

2.此時我們相對@點點幾個字進行高亮,模仿@mo某人效果牺汤,我們只需要找到@點點在文本中的rang辽旋,然后設(shè)置textView的attributedText屬性即可。

        let mutableAtributSting = NSMutableAttributedString(string: string)
        //找到@點點rang
        let rang = (string as NSString).range(of: "@點點")
        //顏色
        mutableAtributSting.addAttribute(NSForegroundColorAttributeName, value: UIColor(red: 4/255.0, green: 186/255.0, blue: 215/255.0, alpha: 1.0), range:rang)
        //字體大小
        mutableAtributSting.addAttribute(NSFontAttributeName, value: UIFont.systemFont(ofSize: 18), range: rang)
        textView?.attributedText = mutableAtributSting

以上就完成了對@點點幾個字的高亮檐迟,效果如下圖所示:

WechatIMG1.jpeg

3.現(xiàn)在如果光標聚焦在點點后面(或者在兩個點字之間)點擊刪除按鈕补胚,需要將@點點這三個字一起刪除。首先我們得知道什么時候點擊了刪除按鈕追迟,可以在textView的代理方法中做文章溶其,當text為空時表示點擊了刪除按鈕,此時我們判斷光標的位置是否在@點點的rang范圍內(nèi)即可敦间。

 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    }

代碼如下

 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        if !text.isEmpty {//不是刪除操作
            return true
        }
        // 計算當前光標相對于文本開始位置的偏移量
        let cursorOffset = textView.offset(from: textView.beginningOfDocument, to: (textView.selectedTextRange?.start)!)
        let rang = (textView.text as NSString).range(of: "@點點")
        if rang.location <= cursorOffset && rang.length + rang.location >= cursorOffset {//找到了
            textView.text = (textView.text as NSString).replacingCharacters(in: rang, with: " ")
            let cursorRange = NSRange(location:rang.location, length: 0)
            textView.selectedRange = cursorRange
            return false
        }
        return true
    }

以上就是NSMutableAttributedString的基本使用及對于UITextView如何將某幾個字作為一個整體刪除瓶逃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末束铭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子厢绝,更是在濱河造成了極大的恐慌契沫,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昔汉,死亡現(xiàn)場離奇詭異懈万,居然都是意外死亡,警方通過查閱死者的電腦和手機靶病,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門会通,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人娄周,你說我怎么就攤上這事涕侈。” “怎么了昆咽?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵驾凶,是天一觀的道長。 經(jīng)常有香客問我掷酗,道長调违,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任泻轰,我火速辦了婚禮技肩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浮声。我一直安慰自己虚婿,他們只是感情好,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布泳挥。 她就那樣靜靜地躺著然痊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屉符。 梳的紋絲不亂的頭發(fā)上剧浸,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機與錄音矗钟,去河邊找鬼唆香。 笑死,一個胖子當著我的面吹牛吨艇,可吹牛的內(nèi)容都是我干的躬它。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼东涡,長吁一口氣:“原來是場噩夢啊……” “哼冯吓!你這毒婦竟也來了倘待?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤桑谍,失蹤者是張志新(化名)和其女友劉穎延柠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锣披,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡贞间,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了雹仿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片增热。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胧辽,靈堂內(nèi)的尸體忽然破棺而出峻仇,到底是詐尸還是另有隱情,我是刑警寧澤邑商,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布摄咆,位于F島的核電站,受9級特大地震影響人断,放射性物質(zhì)發(fā)生泄漏吭从。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一恶迈、第九天 我趴在偏房一處隱蔽的房頂上張望涩金。 院中可真熱鬧,春花似錦暇仲、人聲如沸步做。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽全度。三九已至,卻和暖如春斥滤,著一層夾襖步出監(jiān)牢的瞬間将鸵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工中跌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人菇篡。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓漩符,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驱还。 傳聞我的和親對象是個殘疾皇子嗜暴,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

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