UITextView如何精準限制文字輸入長度
UITextView如何限制限制文字輸入長度
1. 開發中,經常遇到要限制字串輸入長度的需求,你首先想到的可能會用這個代理方法限制長度
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
結果發現並不能完美限制使用者輸入,原因是使用者選中鍵盤頂部條的聯想文字時不會呼叫這個代理方法 , 所以要尋找其他方法,下面提供一種比較全面完美的解決方案
2. 完美解決方案 -- 監聽文字輸入,超出指定長度時,擷取子串
- 第一步: textView的文字改變時,會發出通知,我們需要監聽這個通知
/**
* 監聽textView的文字改變
*/
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewDidChangeText:) name:UITextViewTextDidChangeNotification object:textView];
- 第二步: 實現textViewDidChangeText方法,具體限制使用者輸入
- 中文輸入的時候,需要判斷有沒有markedText(簡體拼音輸入的時候,輸入的拼音還沒有選擇對應的漢字時,輸入框中的輸入的拼音是選中的高亮狀態,這串拼音就是markedText),對這種狀態要做特殊處理,因為這個拼音字串還沒有轉換成漢字字串,不需要做處理,當使用者選擇了拼音對應的漢字時,就需要判斷輸入框的文字進行處理了,具體程式碼如下 :
/**
* 監測使用者輸入文字長度
*/
- (void)textViewDidChangeText:(NSNotification *)notification
{
/**
* 最大輸入長度,中英文字元都按一個字元計算
*/
static int kMaxLength = 10;
UITextView *textView = (UITextView *)notification.object;
NSString *toBeString = textView.text;
// 獲取鍵盤輸入模式
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];
// 中文輸入的時候,可能有markedText(高亮選擇的文字),需要判斷這種狀態
// zh-Hans表示簡體中文輸入, 包括簡體拼音,健體五筆,簡體手寫
if ([lang isEqualToString:@"zh-Hans"]) {
UITextRange *selectedRange = [textView markedTextRange];
//獲取高亮選擇部分
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 沒有高亮選擇的字,表明輸入結束,則對已輸入的文字進行字數統計和限制
if (!position) {
if (toBeString.length > kMaxLength) {
// 擷取子串
textView.text = [toBeString substringToIndex:kMaxLength];
}
} else { // 有高亮選擇的字串,則暫不對文字進行統計和限制
NSLog(@"11111111111111======== %@",position);
}
} else {
// 中文輸入法以外的直接對其統計限制即可,不考慮其他語種情況
if (toBeString.length > kMaxLength) {
// 擷取子串
textView.text = [toBeString substringToIndex:kMaxLength];
}
}
}
- 第三步 : 在dealloc中移除通知監聽
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- iOS技術開發交流QQ群: 579572313
相關文章
- javascript限制文字框輸入長度JavaScript
- UITextView UITextField限制輸入字數以及精準剩餘字數顯示UITextView
- jQuery限制文字框輸入長度詳解jQuery
- 表單限制字串輸入長度字串
- iOS Swift 輸入框限制長度iOSSwift
- iOS 限制textField輸入的長度iOS
- Objective-C:多行文字輸入框(UITextView)ObjectUITextView
- 限定文字框輸入字串長度程式碼字串
- SQLPLUS 下輸入命令的字元長度限制SQL字元
- vue---input只能輸入數字,且限制長度Vue
- element-ui 輸入框el-input 輸入長度限制元件不生效UI元件
- iOS開發若何更好的限制UITextField的輸入長度?iOSUI
- 自定義UITextView輸入框UITextView
- 解決element-ui 輸入框el-input 輸入長度限制元件不生效UI元件
- 文字框限制輸入字數的JSJS
- iOS學習筆記01 textfield 限定輸入的文字長度iOS筆記
- 如何精準實現OCR文字識別?
- Qt 實現文字輸入框,帶字數限制QT
- 限制文字框只能輸入數字:Asp.net&C#ASP.NETC#
- iOS TextFiled,TextView 長度限制,表情限制iOSTextView
- iOS 程式碼限制textField的輸入長度並且刪除按鈕還得有效iOS
- 限制文字框只能夠輸入數字程式碼例項
- 從一次輸入框無法輸入的bug,談如何限制輸入框輸入型別型別
- jquery實現的限制文字框只能輸入非負實數jQuery
- javascript限制textarea文字框輸入字元個數程式碼例項JavaScript字元
- jQuery Validate限定輸入字串的長度jQuery字串
- 讓 Android 輸入框只能輸入固定長度的中英文Android
- input最大長度限制問題
- css限制顯示字數,文字長度超出部分用省略號表示【轉】CSS
- Apple Watch如何獲得文字輸入?APP
- 直播軟體開發,限制富文字框輸入的字元數上限字元
- iOS金額輸入限制iOS
- jquery實現的限制文字框只能夠輸入大於0整數jQuery
- Java —— 標準輸入輸出Java
- 編寫一個程式求輸入字串的長度字串
- iOS -UITextField/UITextView之鍵盤遮擋輸入框解決方法iOSUITextView
- python 標準輸入輸出Python
- 文字框輸入文字倒計詳解