web-dev-qa-db-ja.com

UITextFieldの大文字化

Appleのカレンダーアプリを開きます。新しい予定に名前を付けると、最初の文字が自動的に大文字になります。これを行うために「修正」スタイルのスワップアウトは使用されません。

私の一生の間、私はこの行動を再現することはできません。 IBでは、UITextFieldの大文字の使用をWordに設定しましたが、まったく効果がないようです。修正をオンにすると、Wordが大文字のバージョンに置き換えられますが、これは正しくありません。

キーを押すたびにチェックして、これをコードで処理する必要がありますか?これはおそらく些細なことですが、ユーザーが手動で「shift」を使用して大文字を無効にしたり、削除してキーを再入力したりする場合など、見逃してしまうすべてのコーナーケースについて心配している場合は、大文字にしないでください。 。

または、Shiftキーを押しながらテキストフィールドをロードする方法はありますか?これはそれを実装する一般的な方法ですか?

22
Ben Packard

シミュレーターを使用していますか、それとも実際のデバイスを使用していますか?シミュレーターを使用している場合、ケーシングはコンピューターの物理キーボードのシフト状態とCapsLock状態を尊重します。

22

大文字をWordに設定するとこれが行われるはずなので、他の問題が発生しています。テストしている実際のUITextFieldで切り替えられていることを確認しますか?どういうわけかコードでそれをオーバーライドしていないと確信していますか?プログラムで次のように設定できます。

[myTextField setAutocapitalizationType:UITextAutocapitalizationTypeWords];

これが無視される例外もあります( docs ごと):

一部のキーボードタイプは、自動大文字化をサポートしていません。具体的には、keyboardTypeプロパティの値がUIKeyboardTypeNumberPad、UIKeyboardTypePhonePad、またはUIKeyboardTypeNamePhonePadに設定されている場合、このオプションは無視されます。

これはあなたに当てはまりますか?

62
Ben Zotto

アプリでこれを確認したところ、デフォルトで大文字の使用がすでに行われていました。動作はアプリケーションコードではなく、グローバルなiPhone設定によって決まります。

iOS設定を開始します。 Generalに移動し、次にKeyboardに移動します。ここで、ユーザーには"Auto-Capitalization"のオプションがあります。オフですか?

私の場合はオンになっていたので、アプリとカレンダーにこの機能がありました。オフにすると、ユーザーがこの機能を望まないと判断したため、両方のアプリにこの機能がありません。

16
JeanLuc

大文字の使用を無効にする

textField.autocapitalizationType = UITextAutocapitalizationTypeNone;

すべての文字を大文字にするには

textField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;

文の最初の文字を大文字にするには

textField.autocapitalizationType = UITextAutocapitalizationTypeSentences;

センテンスのすべての単語の最初の文字を大文字にする

textField.autocapitalizationType = UITextAutocapitalizationTypeWords;
4
Salim

特定のキーボードは大文字のタイプを無視します

一部のキーボードタイプは、自動大文字化をサポートしていません。具体的には、keyboardTypeプロパティの値がUIKeyboardTypeNumberPad、UIKeyboardTypePhonePad、またはUIKeyboardTypeNamePhonePadに設定されている場合、このオプションは無視されます。

開発者リファレンスの詳細

4
Gabe Brown

これがSwift 2.0アップデートのすべてのキャラクターです:

SomeTextField.autocapitalizationType = UITextAutocapitalizationType.AllCharacters
3
Jignesh

大文字のプロパティで同じ問題が発生しました。キーボードの種類をデフォルトに変更しただけで、すべてが期待どおりに機能し始めます。私の場合、以前は自動大文字化をサポートしていないkeyboardTypeをNamePhonePadに設定していました。