2012-11-27 28 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