iOS 解決漢字聯想輸入,導致字數限制失效的問題


字數限制的問題點在於漢語可以無限漢語聯想詞匯,導致字數限制對於漢字輸入就失去的作用。我們的做法是監聽鍵盤聯想出來的漢子,將其統計:

1 在viewDidLoad里面監聽文本變化的通知

 

- (void)viewDidLoad {
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewEditChanged:) name:UITextFieldTextDidChangeNotification object:detailAddress];      
}

 

2 實現這個textViewEditChanged:方法

 

 

// 監聽文本改變
-(void)textViewEditChanged:(NSNotification *)obj{
    
    UITextField *textField = (UITextField *)obj.object;

    NSString *toBeString = textField.text;
    
    NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 鍵盤輸入模式
    
    NSUInteger maxLength = MaxNumberOfDescriptionChars-curZone.text.length-1;//加上自動定位的地址,上限是45個漢字
    
    if ([lang isEqualToString:@"zh-Hans"]) { // 簡體中文輸入,包括簡體拼音,健體五筆,簡體手寫
        
        UITextRange *selectedRange = [textField markedTextRange];
        
        //獲取高亮部分
        
        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
        
        // 沒有高亮選擇的字,則對已輸入的文字進行字數統計和限制
        
        if (!position) {
            
            if (toBeString.length > maxLength) {
                
                textField.text = [toBeString substringToIndex:maxLength];
                
            }
            
        }
        
        // 有高亮選擇的字符串,則暫不對文字進行統計和限制
        
        else{
            
            
            
        }
        
    }
    
    // 中文輸入法以外的直接對其統計限制即可,不考慮其他語種情況
    
    else{
        
        if (toBeString.length > maxLength) {
            
            textField.text = [toBeString substringToIndex:maxLength];
            
        }
        
    }
    
}

 

3 當然,你還需要在textField的delegate方法里面做正常的限制

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    
    if ([string isEqualToString:@""])
    {
        return YES;
    }
    NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    
    if (detailAddress == textField)
    {
        NSUInteger maxLength = MaxNumberOfDescriptionChars;//設置文字上限
        if ([toBeString length] > maxLength) {
            textField.text = [toBeString substringToIndex:maxLength];
            [Utils showToastWithText:@"超過最大字數限制"];
            return NO;
        }
    }
    return YES;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM