iOS輸入內容-大寫顯示

開發過程中不免客戶會提出textfield輸入要大寫顯示的需求,例如車牌號之類的,遇到這種問題我們第一時間想到肯定是在textfield編輯過程中對textfield的文字進行操作。
textfield代理方法中有一個shouldChangeCharactersInRange方法,可以監測到每次輸入的內容,監測到之后就可以判斷是否是小寫,并對其進行大寫操作,代碼如下:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (range.length == 1 && string.length == 0) {
        return YES;
    }
char lowercaseChar = [string characterAtIndex:0];
    
if (lowercaseChar > 96 && lowercaseChar < 123) {
        
     NSString * uppercaseString = string.uppercaseString;
     NSString * frontStr = [textField.text substringToIndex:range.location];
     NSString * backStr = [textField.text substringFromIndex:range.location];
     textField.text = [NSString stringWithFormat:@"%@%@%@",frontStr,uppercaseString,backStr];
     return NO;
    }
return YES;
}
后來發現了BUG:

使用上述方法之后,產生的問題:
1、蘋果原生鍵盤無法輸入漢字,只能輸入字母和數字(小寫字母可以轉換成大寫)
2、三方輸入法可以正常使用(可以輸入漢字,小寫可以轉換成大寫)

之后又研究一段時間找到了新的方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ( string.length == 0) {
        return YES;
    }
    
    UITextInputMode *input = [UIApplication sharedApplication].delegate.window.textInputMode;
     NSLog(@"%@",input.primaryLanguage);
    
    if ([input.primaryLanguage isEqualToString:@"zh-Hans"]) {
        // 簡體中文輸入,包括簡體拼音,健體五筆,簡體手寫
        UITextRange *selectedRange = [textField markedTextRange];
        //獲取高亮部分
        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
        // 沒有高亮選擇的字,則對已輸入的文字進行字數統計、限制等處理
               if (!position) {
//            if(textField == self.carNum && self.carNum.text.length > 0){
//                // > 0可以輸入一位漢字
//                return NO;
//            }
        }
    }else{
        // 中文輸入法以外的直接對其統計限制即可,不考慮其他語種情況
//        if(textField == self.carNum && textField.text.length > 7){
//            return NO;
//        }
        
        //小寫變成大寫
        char lowercaseChar = [string characterAtIndex:0];
        if (lowercaseChar > 96 && lowercaseChar < 123) {
            
            NSString * uppercaseString = string.uppercaseString;
            NSString * frontStr = [textField.text substringToIndex:range.location];
            NSString * backStr = [textField.text substringFromIndex:range.location];
            textField.text = [NSString stringWithFormat:@"%@%@%@",frontStr,uppercaseString,backStr];
            return NO;
        }
    }
    return YES;
}

經測試,這這個可以解決蘋果原生鍵盤的bug,修改之后,原生鍵盤允許輸入漢字、字母、數字,字母可轉大寫,但是三方輸入法(搜狗輸入法為例)獲取到的primaryLanguage一直都是"zh-Hans",檢測不到用戶開啟英文鍵盤,所以這套代碼不支持搜狗的小寫轉大寫。

不定時更新~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容