具有国际键盘支持的自动大写文本字段

时间:2012-11-27 18:29:49

标签: ios uitextfield

到目前为止,我试图将输入到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))时会出现问题,因为字符的行为方式(以小写排队)。有没有解决方案来检查键盘内化类型?

1 个答案:

答案 0 :(得分:4)

跳过检查并且总是用大写版本替换文本会简单得多。 请注意,我还使用了当前的语言环境,以便在转换为大写时将考虑其语言环境

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

在这种情况下,性能不应该是一个问题,并且您不需要原始搜索。