0

これまでのところ、UITextFieldに入力されたすべての文字を次のように大文字にしようとしています(USキーボードでうまく機能しています):

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;
}

この問題は、中国語 (ピンイング) などの国際キーボードを使用すると、文字の動作 (小文字でキューに入れられる) が原因で発生します。この/キーボードの内部化タイプを確認する方法の解決策はありますか?

4

1 に答える 1

4

チェックをスキップして、常にテキストを大文字バージョンに置き換える方がはるかに簡単です。 大文字に変換するときにロケールを考慮するように、現在のロケールも使用したことに注意してください

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

この場合、パフォーマンスは問題にならないはずであり、元の検索は必要ありません。

于 2012-11-28T00:38:40.843 に答える