到目前为止,我试图将输入到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 :(得分:4)
跳过检查并且总是用大写版本替换文本会简单得多。 请注意,我还使用了当前的语言环境,以便在转换为大写时将考虑其语言环境:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
textField.text = [textField.text stringByReplacingCharactersInRange:range
withString:[string uppercaseStringWithLocale:[NSLocale currentLocale]]];
return NO;
}
在这种情况下,性能不应该是一个问题,并且您不需要原始搜索。