UITextView如何精準限制文本輸入長度

UITextView如何限制限制文本輸入長度

1. 開發(fā)中,經(jīng)常遇到要限制字符串輸入長度的需求,你首先想到的可能會用這個代理方法限制長度

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

結果發(fā)現(xiàn)并不能完美限制用戶輸入,原因是用戶選中鍵盤頂部條的聯(lián)想文字時不會調用這個代理方法 , 所以要尋找其他方法,下面提供一種比較全面完美的解決方案

2. 完美解決方案 -- 監(jiān)聽文本輸入,超出指定長度時,截取子串

  • 第一步: textView的文本改變時,會發(fā)出通知,我們需要監(jiān)聽這個通知
    /**

     *  監(jiān)聽textView的文本改變

     */

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewDidChangeText:) name:UITextViewTextDidChangeNotification object:textView];
  • 第二步: 實現(xiàn)textViewDidChangeText方法,具體限制用戶輸入
  • 中文輸入的時候,需要判斷有沒有markedText(簡體拼音輸入的時候,輸入的拼音還沒有選擇對應的漢字時,輸入框中的輸入的拼音是選中的高亮狀態(tài),這串拼音就是markedText),對這種狀態(tài)要做特殊處理,因為這個拼音字符串還沒有轉換成漢字字符串,不需要做處理,當用戶選擇了拼音對應的漢字時,就需要判斷輸入框的文字進行處理了,具體代碼如下 :
Paste_Image.png

/**

 *  監(jiān)測用戶輸入文本長度

 */

- (void)textViewDidChangeText:(NSNotification *)notification

{

    /**

     *  最大輸入長度,中英文字符都按一個字符計算

     */

    static int kMaxLength = 10;

    

    UITextView *textView = (UITextView *)notification.object;

    NSString *toBeString = textView.text;

     // 獲取鍵盤輸入模式

    NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];

    // 中文輸入的時候,可能有markedText(高亮選擇的文字),需要判斷這種狀態(tài)

    // zh-Hans表示簡體中文輸入, 包括簡體拼音砂轻,健體五筆勤众,簡體手寫

    if ([lang isEqualToString:@"zh-Hans"]) {

        UITextRange *selectedRange = [textView markedTextRange];

        //獲取高亮選擇部分

        UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];

        // 沒有高亮選擇的字,表明輸入結束,則對已輸入的文字進行字數(shù)統(tǒng)計和限制

        if (!position) {

            if (toBeString.length > kMaxLength) {

                // 截取子串

                textView.text = [toBeString substringToIndex:kMaxLength];

            }

        } else { // 有高亮選擇的字符串藻懒,則暫不對文字進行統(tǒng)計和限制

            NSLog(@"11111111111111========      %@",position);
    
        }

    } else {

        // 中文輸入法以外的直接對其統(tǒng)計限制即可倍试,不考慮其他語種情況

        if (toBeString.length > kMaxLength) {

            // 截取子串

            textView.text = [toBeString substringToIndex:kMaxLength];

        }

    }

}

  • 第三步 : 在dealloc中移除通知監(jiān)聽
- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
  • iOS技術開發(fā)交流QQ群: 579572313
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末础倍,一起剝皮案震驚了整個濱河市飒硅,隨后出現(xiàn)的幾起案子柄驻,更是在濱河造成了極大的恐慌狐树,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸿脓,死亡現(xiàn)場離奇詭異抑钟,居然都是意外死亡,警方通過查閱死者的電腦和手機野哭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門在塔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拨黔,你說我怎么就攤上這事蛔溃。” “怎么了篱蝇?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵贺待,是天一觀的道長。 經(jīng)常有香客問我零截,道長麸塞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任涧衙,我火速辦了婚禮哪工,結果婚禮上奥此,老公的妹妹穿的比我還像新娘。我一直安慰自己雁比,他們只是感情好稚虎,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著偎捎,像睡著了一般祥绞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸭限,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天蜕径,我揣著相機與錄音,去河邊找鬼败京。 笑死兜喻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的赡麦。 我是一名探鬼主播朴皆,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泛粹!你這毒婦竟也來了遂铡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤晶姊,失蹤者是張志新(化名)和其女友劉穎扒接,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體们衙,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡钾怔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蒙挑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宗侦。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖忆蚀,靈堂內(nèi)的尸體忽然破棺而出矾利,到底是詐尸還是另有隱情,我是刑警寧澤馋袜,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布男旗,位于F島的核電站,受9級特大地震影響桃焕,放射性物質發(fā)生泄漏剑肯。R本人自食惡果不足惜捧毛,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一观堂、第九天 我趴在偏房一處隱蔽的房頂上張望让网。 院中可真熱鬧,春花似錦师痕、人聲如沸溃睹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽因篇。三九已至,卻和暖如春笔横,著一層夾襖步出監(jiān)牢的瞬間竞滓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工吹缔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留商佑,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓厢塘,卻偏偏與公主長得像茶没,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晚碾,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

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