iOS 輸入框限制字符長度和內(nèi)容

dome地址
本文主要講解上述dome內(nèi)的使用方法和思路構(gòu)想箫踩。

先說下大致思路(懶得看的可以直接跳過看下邊詳情):

  1. 使用類目方式給textField和TextView添加監(jiān)控其字符改變時(shí)候页响,來檢測其是否是非法字符和超出長度限制的內(nèi)容刘莹,
  2. 在添加監(jiān)控時(shí)候,可以多種選擇渔伯,有他們本身的代理,有觀察者,有target敏簿,根據(jù)情況來看,由于代理往往在輸入框的其他地方需要使用,所以這里盡量就要避過輸入框的使用惯裕,因此根據(jù)實(shí)際情況温数,textField選擇Target來進(jìn)行監(jiān)控。而textView并沒有Target蜻势,但是經(jīng)過翻閱API可以看到撑刺,textView 有幾個(gè)關(guān)于輸入內(nèi)容的通知,故握玛,這里的textView選用系統(tǒng)的通知來實(shí)現(xiàn)够傍。
  3. 然后我們這里分為兩個(gè)部分:對內(nèi)容長度進(jìn)行限制,對內(nèi)容進(jìn)行限制挠铲,這里我們在開始注冊監(jiān)控方法時(shí)候會添加兩個(gè)屬性文本限制的最大長度和內(nèi)容限制的類型冕屯,然后分別進(jìn)行限制。
  4. 在這里邊有個(gè)問題拂苹,就是本內(nèi)容是通過給輸入框重賦值的方式來進(jìn)行實(shí)現(xiàn)的安聘,因此會出現(xiàn)光標(biāo)位置在一定情況下跑偏的情況,所以瓢棒,加入了另一個(gè)方法浴韭,獲取當(dāng)前光標(biāo)和給當(dāng)前內(nèi)容賦予光標(biāo)位置。解決掉這個(gè)問題脯宿。

注:兩個(gè)控件其實(shí)只有添加監(jiān)控方法上有根本的區(qū)別念颈,其他包括光標(biāo)和限制都是一樣的,但為什么不寫在一起呢连霉,因?yàn)橛械臅r(shí)候需要只調(diào)用其中一個(gè)就可以了舍肠,所以還是分開寫比較好。

限制字符長度和內(nèi)容.gif

接下來是詳情

1.使用類目來進(jìn)行添加方法

這個(gè)就不用詳細(xì)解釋為什么了窘面,因?yàn)槔^承和代理都不太好翠语,需要對原有代碼進(jìn)行大幅改動。

2.添加監(jiān)控

textField
textField添加監(jiān)控的方法

在這里添加了兩個(gè)屬性财边,這里我是用runtime進(jìn)行添加的肌括,具體的不再贅述,大家可以去另外搜索酣难。


用runtime添加屬性

上面添加監(jiān)控即用的是Target谍夭,因?yàn)槠鋵?shí)UITextField是繼承于UIControl的一個(gè)子類,故可以直接添加狀態(tài)改變的方法憨募。

textView
textView添加監(jiān)控的方法
textView關(guān)于編輯狀態(tài)的幾個(gè)通知名

從這里可以看出來紧索,蘋果方面對于這些基本的構(gòu)思的還是很合理的
因?yàn)閠extView其實(shí)是繼承于UIScrollView的子類,他沒有Target方法菜谣,所以經(jīng)過選擇后珠漂,發(fā)現(xiàn)用這個(gè)通知是非常合理的晚缩。
這里一樣都添加了兩個(gè)屬性,來進(jìn)行一些設(shè)置的存儲媳危。

3.對內(nèi)容長度和內(nèi)容進(jìn)行限制

對內(nèi)容進(jìn)行限制

說到對內(nèi)容進(jìn)行限制就需要說到這個(gè)枚舉ImportChatType

ImportChatType枚舉

這里我把這個(gè)枚舉單獨(dú)寫在了一個(gè).h文件里荞彼,因?yàn)閮蓚€(gè)控件都要調(diào)用這個(gè)枚舉,所以將其單獨(dú)寫一個(gè)文件待笑。

后續(xù)在調(diào)用時(shí)候不用調(diào)用這個(gè)枚舉的文件鸣皂,只用調(diào)用對應(yīng)的類目文件即可

這個(gè)枚舉列舉了基本的內(nèi)容限制的功能,同樣暮蹂,后續(xù)可以添加枚舉寞缝,但是添加枚舉時(shí)候一定要同時(shí)添加轉(zhuǎn)換對應(yīng)正則表達(dá)式的方法。

接著就是完成對內(nèi)容進(jìn)行判斷是否是非法的內(nèi)容


用正則對內(nèi)容進(jìn)行判斷

判斷完成后返回正確的剩余字符仰泻,在這里即使是復(fù)制過來的字符也可以進(jìn)行每個(gè)字符的甄別荆陆,最后只保留設(shè)置好的字符。

對長度進(jìn)行限制

長度的限制比較簡單我纪,很多地方也都能找到并實(shí)現(xiàn)慎宾,但我這里找到的丐吓,是在于我們輸入中文的時(shí)候拼音會輸入不全浅悉,導(dǎo)致最后沒法輸入,我這里完全沒這個(gè)問題券犁,因?yàn)檫@里是當(dāng)還有未選中字符的時(shí)候术健,不進(jìn)行長度和內(nèi)容的判斷,故可以避開這個(gè)問題粘衬。


限制長度

4.處理光標(biāo)問題

處理光標(biāo)

上圖是核心的兩個(gè)方法荞估,在處理上還是用runtime進(jìn)行添加了一個(gè)屬性,
首先在每次文本改變時(shí)候觸發(fā)方法后先獲取光標(biāo)的位置稚新,然后再經(jīng)過一系列的處理后勘伺,然后再將光標(biāo)賦予回去,這樣就可以保證光標(biāo)始終在用戶當(dāng)前的輸入位置褂删。

調(diào)用

一句話調(diào)用即可

和添加觀察者類似~~


以上就是這個(gè)dome的所有內(nèi)容飞醉,如果有任何意見和建議歡迎提出,謝謝瀏覽屯阀。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缅帘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子难衰,更是在濱河造成了極大的恐慌钦无,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盖袭,死亡現(xiàn)場離奇詭異失暂,居然都是意外死亡彼宠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門趣席,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兵志,“玉大人,你說我怎么就攤上這事宣肚∠牒保” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵霉涨,是天一觀的道長按价。 經(jīng)常有香客問我,道長笙瑟,這世上最難降的妖魔是什么楼镐? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮往枷,結(jié)果婚禮上框产,老公的妹妹穿的比我還像新娘。我一直安慰自己错洁,他們只是感情好秉宿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屯碴,像睡著了一般描睦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上导而,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天忱叭,我揣著相機(jī)與錄音,去河邊找鬼今艺。 笑死韵丑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虚缎。 我是一名探鬼主播撵彻,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼遥巴!你這毒婦竟也來了千康?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤铲掐,失蹤者是張志新(化名)和其女友劉穎拾弃,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摆霉,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豪椿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年奔坟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搭盾。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咳秉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸯隅,到底是詐尸還是另有隱情澜建,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布蝌以,位于F島的核電站炕舵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏跟畅。R本人自食惡果不足惜咽筋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望徊件。 院中可真熱鬧奸攻,春花似錦、人聲如沸虱痕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽皆疹。三九已至疏橄,卻和暖如春占拍,著一層夾襖步出監(jiān)牢的瞬間略就,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工晃酒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留表牢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓贝次,卻偏偏與公主長得像崔兴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蛔翅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

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