一個(gè)簡單富文本輸入框控件的設(shè)計(jì)歷程(一)

? 開發(fā)中厦坛,一提到富文本輸入框五垮,很多人會(huì)想到使用第三方的框架,比如 YYText杜秸。我也和大多數(shù)人一樣放仗,不想重復(fù)造輪子,但是我發(fā)現(xiàn)很多第三方的功能實(shí)在是太多太全了撬碟,而我只需要其中的一種而已诞挨,于是乎打算自己弄一個(gè)玩玩兒。先來看一下效果圖呢蛤。

? 如何設(shè)計(jì)呢惶傻?富文本其實(shí)最主要思想是,把富文本和普通文本一一對(duì)應(yīng)起來其障。比如富文本是 “undefined”银室,那么它的普通文本就是“標(biāo)題”。那么如何把這種關(guān)系對(duì)應(yīng)起來呢静秆?


方案一:

1粮揉、用一個(gè)數(shù)組存放富文本的信息(富文本 NSRange ,普通文本中的 NSRange,富文本內(nèi)容)抚笔;

2扶认、當(dāng)用戶輸入的時(shí)候,更新數(shù)組中 NSRange 的值殊橙;

3辐宾、控制光標(biāo)位置不在富文本范圍以內(nèi);

4膨蛮、控制選擇范圍的起點(diǎn)和終點(diǎn)不在富文本范圍以內(nèi)叠纹;

5、調(diào)整富文本顯示的顏色敞葛;

6誉察、獲取富文本;

7惹谐、獲取普通文本持偏。

? 如何你去實(shí)現(xiàn),2氨肌、3鸿秆、4、5 怎囚、6 這幾個(gè)方法都需要枚舉整個(gè)數(shù)組卿叽,而且在更新 NSRange 的時(shí)候也比較麻煩,這樣的效率是比較低的,因此我實(shí)現(xiàn)到 2/3 的時(shí)候放棄了考婴,另謀他路贩虾,結(jié)果還真的被我找到了,那就是方案二蕉扮。


? 方案二總結(jié)就是三個(gè)“一”整胃。一個(gè)類,一個(gè)屬性喳钟,一個(gè)方法。? ? ?

?一個(gè)類: NSMutableAttributedString在岂。??

? 一個(gè)屬性:該類的 attribute 屬性奔则。

? attribute 除了支持系統(tǒng)已定義的外,還支持用戶自定義的蔽午。因此它便可以替代我方案一中數(shù)組的作用易茬,并維護(hù)富文本的位置信息。 ? ? ?

一個(gè)方法:- (void)enumerateAttributesInRange:(NSRange)enumerationRange options:(NSAttributedStringEnumerationOptions)opts usingBlock:(void (NS_NOESCAPE ^)(NSDictionary*attrs, NSRange range, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);

? 這個(gè)方法很特殊及老,主要是看我紅框框中的內(nèi)容抽莱,意思是,你可以在枚舉的時(shí)候隨意更改該 Range 內(nèi)的內(nèi)容骄恶,增食铐、刪、改都不會(huì)影響它的枚舉位置僧鲁。

方案二:

1虐呻、使用 NSMutableAttributedString 來記錄富文本信息;

2寞秃、使用 NSMutableAttributedString 獲取相關(guān)富文本信息斟叼;

(今天就寫到這兒,各位是否已經(jīng)知道如何做了春寿,明天我再把具體的實(shí)現(xiàn)方法貼出來)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朗涩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子绑改,更是在濱河造成了極大的恐慌谢床,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绢淀,死亡現(xiàn)場離奇詭異萤悴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)皆的,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門覆履,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事硝全∑芪恚” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵伟众,是天一觀的道長析藕。 經(jīng)常有香客問我,道長凳厢,這世上最難降的妖魔是什么账胧? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮先紫,結(jié)果婚禮上治泥,老公的妹妹穿的比我還像新娘。我一直安慰自己遮精,他們只是感情好居夹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著本冲,像睡著了一般准脂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上檬洞,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天狸膏,我揣著相機(jī)與錄音,去河邊找鬼疮胖。 笑死环戈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的澎灸。 我是一名探鬼主播院塞,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼性昭!你這毒婦竟也來了拦止?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤糜颠,失蹤者是張志新(化名)和其女友劉穎汹族,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體其兴,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顶瞒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了元旬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榴徐。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡守问,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坑资,到底是詐尸還是另有隱情耗帕,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布袱贮,位于F島的核電站仿便,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏攒巍。R本人自食惡果不足惜嗽仪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窑业。 院中可真熱鬧钦幔,春花似錦、人聲如沸常柄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽西潘。三九已至,卻和暖如春哨颂,著一層夾襖步出監(jiān)牢的瞬間喷市,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工威恼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留品姓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓箫措,卻偏偏與公主長得像腹备,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斤蔓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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