2012-11-27 29 views
0

我想大寫的所有字符輸入到的UITextField遠用下面這樣(美式鍵盤工作的偉大):自動大寫文本字段隨着國際鍵盤支持

self.textField = UITextAutocapitalizationTypeAllCharacters; 
... 
// delegate 
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSRange lowercaseCharRange = [string rangeOfCharacterFromSet:[NSCharacterSet lowercaseLetterCharacterSet]]; 

    if (lowercaseCharRange.location != NSNotFound) { 
     textField.text = [textField.text stringByReplacingCharactersInRange:range 
                   withString:[string uppercaseString]]; 
     return NO; 
    } 

    return YES; 
} 

使用國際鍵盤等時出現的問題作爲中文(Pinying),因爲字符的行爲方式(以小寫排隊)。有沒有解決方法來檢查鍵盤內部化類型?

+0

拼音不宜大寫AFAIK。 – ninjaneer

回答

4

跳過檢查並且總是用大寫版本代替文本會簡單得多。 請注意,我還使用了當前的區域,這樣它會考慮他們的語言環境轉換爲大寫時:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    textField.text = [textField.text stringByReplacingCharactersInRange:range 
                  withString:[string uppercaseStringWithLocale:[NSLocale currentLocale]]]; 
    return NO; 
} 

性能不應該是在這種情況下一個問題,你不需要原始搜索。

+0

仍然無法正常工作。我認爲問題在於pinying會將_lowercase_字母附加到文本字段的末尾,並且這會將其替換爲大寫版本,因此Pinying支持將被刪除。需要有一種方法來將文本的顯示與實際替換的文本分開。 (最終我的目標是顯示大寫字母,同時仍然允許用戶插入拼音字符) – nmock

+0

你試過這個'[string uppercaseStringWithLocale:[NSLocale currentLocale]]'我的例子?如果這不起作用,那麼這是一個應該報告給蘋果公司的錯誤.... – lnafziger

+0

是的,你是否已經在iOS6上成功地嘗試了代碼?我嘗試了它沒有代碼(全部保持小寫,一切正常,但與區域設置,支持被打破) – nmock