textField和textView字數限制
在字元的限制中可能會遇到兩種情況,
第一種是如何將一個漢字相當於兩個字元的佔位空間,
第二種是當輸入法是中文時限制字元的判斷會出錯,因為textField :shouldChangeCharactersInRange:replacementString這個方法只能捕獲鍵盤輸入的事件,而不能捕獲選擇字元的事件。
先上程式碼怎麼解決我自己的問題的,這個textview,textfiled一樣使用。這是根據下邊的理論,發現不能解決問題想出的“奇招”,看到第一句程式碼,我就想敲打,蘋果能快點解決這個問題不。
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange )range replacementText:(NSString *)text
{
if ([text isEqualToString:@""]) {//這個是漢語聯想的時候的他會出現的,第一次暫時讓其聯想,下次輸入就不能聯想了,因為第一次聯想它不給自己算lenth,下次再聯想詞彙就會算上上次輸入的,這個是蘋果自己的BUG 如果是textfiled,一樣 檢測每個字元的變化。
return YES;
}
if (textView.text.length>=40)
{
return NO;
}
else
{
return YES;
}
return YES;
}
下邊兩個方案是參考方案,不一定有用,因為公司測試和領導特別苛刻,不能用,也許對你有用
第一種情況解決方案:
#pragma mark -- UITextfielfDelegate imp
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSUInteger charLen = [self lenghtWithString:toBeString];
if (textField.tag == 1) {
if (charLen > 40) { //活動地址 限制字數為20個 (一個漢字相當於兩個字元)
return NO;
}
} else {
if (charLen > 80) { //活動主題 限制字數為40個
return NO;
}
}
return YES;
}
// 計算轉換後字元的個數
- (NSUInteger) lenghtWithString:(NSString *)string
{
NSUInteger len = string.length;
// 漢字字符集
NSString * pattern = @"[\u4e00-\u9fa5]";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
// 計算中文字元的個數
NSInteger numMatch = [regex numberOfMatchesInString:string options:NSMatchingReportProgress range:NSMakeRange(0, len)];
return len + numMatch;
}
第二種情況解決方案:
#define MaxNumberOfDescriptionChars 50
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(textViewEditChanged:) name:UITextViewTextDidChangeNotification object:_titleView];
}
// 監聽文字改變
-(void)textViewEditChanged:(NSNotification *)obj{
UITextView *textView = (UITextView *)obj.object;
NSString *toBeString = textView.text;
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 鍵盤輸入模式
if ([lang isEqualToString:@"zh-Hans"]) { // 簡體中文輸入,包括簡體拼音,健體五筆,簡體手寫
UITextRange *selectedRange = [textView markedTextRange];
//獲取高亮部分
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 沒有高亮選擇的字,則對已輸入的文字進行字數統計和限制
if (!position) {
if (toBeString.length > MaxNumberOfDescriptionChars) {
textView.text = [toBeString substringToIndex:MaxNumberOfDescriptionChars];
}
}
// 有高亮選擇的字串,則暫不對文字進行統計和限制
else{
}
}
// 中文輸入法以外的直接對其統計限制即可,不考慮其他語種情況
else{
if (toBeString.length > MaxNumberOfDescriptionChars) {
textView.text = [toBeString substringToIndex:MaxNumberOfDescriptionChars];
}
}
}
// 這是個委託方法,在這裡可使用可不使用。使用這個方法就是當輸入的字元超過限制時就禁止輸入。
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
NSString *new = [textView.text stringByReplacingCharactersInRange:range withString:text];
if(new.length > MaxNumberOfDescriptionChars){
if (![text isEqualToString:@""]) {
return NO;
}
}
return YES;
}
相關推薦
textField和textView字數限制
在字元的限制中可能會遇到兩種情況, 第一種是如何將一個漢字相當於兩個字元的佔位空間, 第二種是當輸入法是中文時限制字元的判斷會出錯,因為textField :shouldChangeCharactersInRange:replacementString這
TextField和TextView字數超出擷取問題
在IOS開發中,我們經常需要對textfield和textView中的文字進行限制, 對於超出限制的內容進行擷取。但在實際開發過程中會遇到一些問題: 1.在輸入中文的時候,系統會在你開始拼音的時候就統計
ios textfield和textView完美簡單的字數限制
如果是textfield新增一個方法[self.textField addTarget:self action:@selector(textFieldChanged:) forControlEvents:UIControlEventEditingChanged] 如果是te
關於iOS對textView字數限制的一些解法
現在的伺服器一般是不會對字數做限制的,但是遇到一個需求需要對字數做限制,並且同時更新剩餘的字數,也許有些朋友會想著用textField或label來做,單是總是存在一些不完美,或一些其他的問題難解決. 用textField的話,自動換行是個難題,因為他並不提供這個屬性.
移動端textarea輸入框監聽和輸入字數限制(相容ios和Android)
html <div class="textareaBox"> <textarea class="wishContent" placeholder="請輸入不超過15個字" maxlength="15"></te
textarea輸入框監聽和輸入字數限制
html <textarea class="wishContent" placeholder="請輸入不超過15個字" maxlength="15"> </textarea>
禁止textField和textView的複製貼上選單:
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender { if ([UIMenuController sharedMenuCont
iOS中TextField 和 TextView 控制元件的基本使用
介紹-introduction This time I want to create a new simple project which is a self-introduction program to show some fundamental w
UITextField和UITextView字數限制
UITextField字數限制 [self.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; - (
Form表單,textarea標籤輸入框 字數限制,和已輸入字數的統計顯示
<script type="text/javascript"> $(document).ready(function() { <%-- 頁面進來時就呼叫 --%> setTitleLength(); }); function setTitleLength() {
vue監聽對input輸入的字體字數限制
script href htm 雙向 keywords attribute chrom his handle <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <
IE對CSS樣式的數量和大小的限制
行合並 樣式 。。 不一定 無法 開始 css pan 2個 項目中遇到的問題,css寫的樣式無法渲染,各種百度後發現大概是這個原因: IE對CSS樣式的數量和大小的限制 文檔中只有前31個link或style標記關聯的CSS能夠應用。 從第32個開始,其標記關聯的CSS都
完美解決textarea字數限制
prop com HR change 技術 .text var border scrip 1. <textarea id="area" name="ss" placeholder="請輸入文本內容"></textarea> 2. <
UITextView字數限制
表情 mar pos uitext target range lac 五筆 刪除字符 經常做,經常忘,記下來,以後好直接拷貝。 開始使用如下方法做限制 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRa
Linux部署禪道及默認端口修改和附件大小限制修改和使用過程各種排坑
文件大小 拒絕 valid 就是 process vpd ESS 版本 ffffff Linux部署禪道及默認端口修改和附件大小限制修改和使用過程各種排坑 本篇博客將分享本人在使用禪道是遇到的很多問題希望對大家有所幫助 有些問題只是發現了但現在的能力沒辦法解決希望大佬能
用谷歌瀏覽器將英文文檔翻譯成中文的方法(無字數限制)【轉載並修正】
需要 html 軟件 art sdn 網頁 detail 瀏覽器 中英語 作者:fuzimango 來源:CSDN 原文:https://blog.csdn.net/fuzimango/article/details/77419080 需要的軟件:Adobe Acrobat
微信小程式開發中textarea文字域監聽字數限制與動態計算
微信小程式開發時常會有評論或者備註功能,都會用到文字域字元長度計算以及字元限制的功能,筆者把最簡潔易用的案例分享出來。學習之前先看微信官方API文件 https://mp.weixin.qq.com/debug/wxadoc/dev/component/textarea.html
中科院AI+安防報告 解密8大趨勢和8大限制
【中國安防展覽網 市場分析】系統梳理總結當前安防+AI 的發展現狀,尤其重點分析智慧安防領域存在的八大限制性因素,以及智慧安防的八大新的發展趨勢。 傳統的安防企業、新興的 AI 初創企業,開始積極從技術各個維度擁抱人工智慧,在模式識別基礎理論、影象處理、計算機視覺以及語音資訊處理展
android中關於textview字數顯示的問題
只需要下邊的設定: textview.setSingleLine(); textview.setEllipsiz(TextUtils.TruncateAt.valueOf("END")); 在xml中設定如下: android:singleLine="true" android:ell
textarea字數限制並模擬placeholder
<textarea placeholder="您的建議是我們前進的動力!" rows="15" maxlength="300" onchange="this.value=this.value.substring(0, 300)" onkeydown="this.value=this.