使用しているSDKについては言及していませんが、3.0以降では、希望する動作が見られます。
とはいえ、デリゲートからtextFieldDidEndEditingメソッドを使用して編集を終了するときは、いつでもテキストを大文字に変更できます。
- (void)textFieldDidEndEditing:(UITextField *)textField {
NSString *textToUpper = [textField.text uppercaseString];
[theTextField setText:textToUpper];
}
または、テキストフィールドが変更されたときに通知を設定することで、入力中にテキストを変更できます。
// setup the UITextField
{
theTextField.delegate = self;
theTextField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
[theTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
}
UISearchBarとは異なり、UITextFieldはtextDidChangeを実装しないため、この方法で行う必要があります。このようなもの、おそらく?
- (void)textFieldDidChange:(UITextField *)textField {
NSRange range = [textField.text rangeOfString : @"-"];
if (range.location != NSNotFound) {
theTextField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
}
}