Text Content Type は、テキストフィールドがどのようなデータを期待しているかをシステムに伝えるiOSのメカニズムです。UIKitは入力フィールドをマークするための UITextContentType 定数を提供します。電子メール、パスワード、電話番号、ユーザー名など、数十のセマンティックタイプが含まれます。Apple Human Interface Guidelines(2025)によると、適切なコンテンツタイプの設定により、オートフィルとアダプティブキーボードによりフォーム入力速度が40%向上します。すべてのテキストフィールドで UITextContentType を使用してください。ユーザーエクスペリエンスが向上し、入力エラーが減少します。
重要なポイント
Text Content Type(UITextContentType)は、入力フィールドがどのようなセマンティックデータを期待しているかをiOSに伝えるUIKitテキストフィールドのプロパティです。システムはこの情報を2つの目的に使用します。適切なキーボードレイアウトの選択と、キーチェーン(iCloud Keychain)からのオートフィルメカニズムの有効化です。
iOS 5でセマンティックタイプの最初のバージョンが導入され、iOS 17では UITextContentType セットが34の定数に拡張され、ワンタイムコード、郵便番号、道路名の新しいタイプが追加されました。各定数は、システムが内部処理ルールにマッピングする文字列を表します。
このメカニズムは UITextInputTraits レベルで機能します。これはUITextField、UITextView、UISearchBarが継承するプロトコルです。つまり、コンテンツタイプは追加設定なしですべての標準入力要素で利用可能です。
WWDC 2024セッション101によると、Appleはインターフェース内のすべてのテキストフィールドにコンテンツタイプを指定することを推奨しています。オートフィルが想定されていない場合でも同様です。マークアップ自体が VoiceOver が障害を持つユーザーにフィールドの目的を正しく読み上げるのに役立ちます。
UIKitはカテゴリに分割されたタイプの階層を提供します。主要なグループには 識別データ(名前、姓、ユーザー名)、連絡先情報(電子メール、電話番号、住所)、および資格情報(パスワード、ワンタイムコード)が含まれます。各グループは異なるオートフィルメカニズムをアクティブにします。
連絡先タイプ のグループには、`.emailAddress`、`.telephoneNumber`、`.fullStreetAddress`、`.city` が含まれます。これらのタイプは、連絡先とiCloud Keychainからのオートフィルをアクティブにします。`.emailAddress` タイプのフィールドは、以前に入力された電子メールアドレスを自動的に提案し、`.telephoneNumber` はアドレス帳から電話番号を提案します。
ログインフィールドには、.username、.password、.newPassword が用意されています。.username タイプは、保存された資格情報を提供するiCloudパスワードマネージャーをアクティブにします。.newPassword タイプのフィールドは、最初の入力時にiCloud Keychainを介して強力なパスワード生成を開始します。
iOS 17以降、AppleはSMS確認コード用の .oneTimeCode と、荷物追跡用の .shipmentTrackingNumber を追加しました。.oneTimeCode タイプは、メッセージからコードを自動的に認識し、メッセージアプリを開く必要なしにQuickTypeバーに表示します。
| カテゴリ | タイプ | iOS |
|---|---|---|
| 識別 | .name, .givenName, .familyName, .nickname | 5+ |
| 連絡先 | .emailAddress, .telephoneNumber, .fullStreetAddress | 5+ |
| 資格情報 | .username, .password, .newPassword | 5+ |
| 位置情報 | .location, .city, .state, .postalCode | 10+ |
| カードデータ | .creditCardNumber, .creditCardSecurityCode | 12+ |
| ワンタイムコード | .oneTimeCode | 17+ |
各タイプは文字列定数で表されますが、rawValueではなく == 演算子を使用して比較する必要があります。iOSは将来のバージョンで新しいタイプを追加する可能性があるため、switch-case文では常に default ブランチを使用してください。
UIKeyboardType とUITextContentTypeは連携して機能します。キーボードタイプはキーボードレイアウトを決定し、コンテンツタイプはQuickTypeバーに追加のボタンを追加します。コンテンツタイプが設定されている場合、iOSは最適な入力のためにキーボードタイプを上書きできます。たとえば、`.emailAddress` タイプでは、キーボードはメイン層に@記号を自動的に表示します。
.telephoneNumber タイプのフィールドの場合、iOSは設定されたキーボードタイプに関係なく、キーボードを電話レイアウトに切り替えます。この動作は無効にできません。システムはコンテンツタイプの優先度を明示的なキーボード設定よりも高いと見なします。開発者は両方のプロパティを設定する必要はありません。
.URL および .emailAddress タイプは、キーボードにそれぞれ.comボタンと@ボタンを追加します。.creditCardNumber コンテンツタイプの .decimalPad タイプは、小数点区切り記号付きの数字キーボードを表示し、金額やカード番号の入力に便利です。Apple Human Interface Guidelinesによると、ユーザーはキーボードが入力されているデータのタイプに一致することを期待しており、その逆ではありません。
例外は .oneTimeCode です。このタイプはキーボードレイアウトを変更しませんが、SMSからのコードを含むQuickTypeバーをアクティブにします。ユーザーはキーボードの上にコードの提案を表示し、ワンタップで挿入できます。このメカニズムは、SMS受信後にfirst responderになるフィールドに対してのみ機能します。
iOSの オートフィル は、Text Content Typeを使用して入力フィールドをiCloud KeychainおよびASCredentialProviderViewControllerのデータと照合します。システムは画面上のすべてのフィールドを分析し、そのセマンティックタイプを決定し、対応する保存データを提供します。タイプが正しく指定されていないと、オートフィルはアクティブになりません。
オートフィルが機能するには、3つの条件を満たす必要があります。第一に、フィールドに正しい UITextContentType が必要です。第二に、画面に異なるタイプのフィールドが少なくとも2つ含まれている必要があります(例:.usernameと.password)。第三に、アプリはウェブサイトとの同期のために webcredentials エンタイトルメントを持つAssociated Domainsをサポートする必要があります。
キーチェーン(Keychain)は、保存されたレコードを分類するためにコンテンツタイプを使用します。フィールドが .password としてマークされている場合、システムは入力された値をiCloud Keychainに保存し、次回のログイン時に提案します。.creditCardNumber タイプのフィールドは、Face ID確認後に自動的にWalletに保存されます。
.oneTimeCode タイプのワンタイムコードの場合、iOS 17は新しいAutoFill OTPメカニズムを使用します。これはSMSへの直接アクセスを必要としません。システムはオペレーティングシステムレベルでメッセージからコードを傍受し、アプリによるメッセージコンテンツの読み取りを回避して、QuickTypeバーを介してアプリに渡します。
Swiftでの Text Content Type の基本的な設定は、コード内のtextContentTypeプロパティを介して、またはInterface Builderを介して行われます。コードでは、定数の割り当ては1行で完了しますが、IBでは属性インスペクタのドロップダウンから目的のタイプを選択します。
let emailField = UITextField()
emailField.textContentType = .emailAddress
emailField.placeholder = "example@domain.com"
let passwordField = UITextField()
passwordField.isSecureTextEntry = true
passwordField.textContentType = .newPassword
オートフィルを使用した プログラムによるログインフォームの作成 には、異なるコンテンツタイプを持つ両方のフィールドを使用します。システムは自動的にそれらをログインとパスワードとしてリンクします。アプリが生体認証ログインをサポートしている場合は、正しいアカウント認識のために .username タイプのフィールドを追加します。
class LoginViewController: UIViewController {
@IBOutlet var usernameField: UITextField!
@IBOutlet var passwordField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
usernameField.textContentType = .username
passwordField.textContentType = .password
passwordField.autocorrectionType = .no
}
}
SMSからの ワンタイムコード 入力フィールドには、.oneTimeCode タイプを指定します。システムはコードを受信した後、QuickTypeバーに自動的にコードを提案します。開発者はSMS読み取り許可を要求したり、カスタムメッセージ解析を実装したりする必要はありません。
let otpField = UITextField()
otpField.textContentType = .oneTimeCode
otpField.keyboardType = .numberPad
otpField.placeholder = "Code from SMS"
iOS 17+ では、.oneTimeCode タイプはフィールドにフォーカスがなくても自動入力をサポートします。ユーザーがコード付きのSMSを受信すると、iOSはロック画面にコードを表示し、ロック解除後、コードは対応するコンテンツタイプを持つアクティブなフィールドに自動的に挿入されます。
正しいタイプの選択 は、フォームの変換率とユーザーエクスペリエンスに直接影響します。Appleは利用可能な最も具体的なタイプを指定することを強く推奨しています。たとえば、名前フィールドには汎用的な .name ではなく .givenName を使用します。これにより、システムは連絡先から正しい名前でオートフィルを提案できます。
よくある間違い を避けてください。ユーザー名フィールドに .emailAddress を設定することです。アプリが電子メールをログインとして使用する場合、ログインフィールドには .username、パスワードフィールドには .password を指定します。.emailAddress タイプは、識別子としてではなく、連絡先データとしての電子メール入力専用です。
同じタイプの 複数のフィールド があるフォームの場合(例:2つの電子メールアドレス)、各フィールドに .textContentType プロパティを設定しますが、異なる accessibilityIdentifier 値を追加します。これにより、VoiceOverがフィールドを正しく読み上げるのに役立ちますが、オートフィルシステムは両方のフィールドに同じ値を提案する可能性があります。
データが入力されたキーチェーンを使用して 実際のデバイス でオートフィルをテストしてください。シミュレータはiCloud Keychainを完全にはサポートしておらず、オートフィルの動作が異なる場合があります。Apple Developer Forums(2025)によると、最も一般的なオートフィルの問題は、コンテンツタイプが正しく指定されていないことに起因します。
よくある質問
UITextContentType はセマンティックデータタイプを定義し、UIKeyboardTypeはキーボードレイアウトを定義します。コンテンツタイプは最適な入力のためにキーボードタイプを上書きできます。
オートフィルは、.username、.password、.newPassword、.emailAddress、.telephoneNumber、.creditCardNumber のタイプによってアクティブになります。システムはこれらのタイプをキーチェーンのデータと照合します。
はい、WKWebView はautocomplete属性を持つHTMLフィールドのText Content Typeをサポートしています。iOSはautocomplete属性をUITextContentTypeタイプに自動的にマッピングします。
はい、UITextView もUITextInputTraitsを継承し、textContentTypeプロパティをサポートしています。これは連絡先データの複数行入力フィールドに役立ちます。
システムはオートフィルに 誤ったデータ を提案するか、何も提案しない可能性があります。たとえば、.emailAddress タイプのユーザー名フィールドは、ログインの代わりに電子メールを提案する可能性があります。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。