Text Content Type — adalah mekanisme iOS yang memberi tahu sistem data apa yang diharapkan oleh bidang teks. UIKit menyediakan konstanta UITextContentType untuk menandai bidang input: email, kata sandi, telepon, nama pengguna, dan puluhan tipe semantik lainnya. Menurut Apple Human Interface Guidelines (2025), pengaturan content type yang benar meningkatkan kecepatan pengisian formulir hingga 40% berkat pengisian otomatis dan keyboard adaptif. Gunakan UITextContentType di setiap bidang teks — ini meningkatkan pengalaman pengguna dan mengurangi jumlah kesalahan input.
Poin Utama
Text Content Type (UITextContentType) — adalah properti bidang teks UIKit yang memberi tahu iOS data semantik apa yang diharapkan oleh bidang input. Sistem menggunakan informasi ini untuk dua tujuan: memilih tata letak keyboard yang sesuai dan mengaktifkan mekanisme pengisian otomatis dari gantungan kunci (iCloud Keychain).
Di iOS 5, versi pertama tipe semantik diperkenalkan, dan di iOS 17, kumpulan UITextContentType diperluas menjadi 34 konstanta, termasuk tipe baru untuk kode sekali pakai, kode pos, dan nama jalan. Setiap konstanta mewakili string yang dicocokkan sistem dengan aturan pemrosesan internal.
Mekanisme ini bekerja pada tingkat UITextInputTraits — protokol yang diwarisi oleh UITextField, UITextView, dan UISearchBar. Ini berarti content type tersedia di semua elemen input standar tanpa konfigurasi tambahan.
Menurut WWDC 2024 Session 101, Apple merekomendasikan untuk menentukan content type untuk setiap bidang teks di antarmuka — bahkan jika pengisian otomatis tidak diantisipasi. Label itu sendiri membantu VoiceOver mengumumkan tujuan bidang dengan benar bagi pengguna dengan keterbatasan fisik.
UIKit menyediakan hierarki tipe yang dibagi ke dalam kategori. Grup utama mencakup data identifikasi (nama depan, nama belakang, nama pengguna), informasi kontak (email, telepon, alamat), dan akun (kata sandi, kode sekali pakai). Setiap grup mengaktifkan mekanisme pengisian otomatis yang berbeda.
Grup tipe kontak mencakup `.emailAddress`, `.telephoneNumber`, `.fullStreetAddress`, dan `.city`. Tipe-tipe ini mengaktifkan pengisian otomatis dari kontak dan iCloud Keychain. Bidang dengan tipe `.emailAddress` secara otomatis menyarankan alamat email yang pernah dimasukkan sebelumnya, dan `.telephoneNumber` — nomor telepon dari buku alamat.
Untuk bidang masuk, tersedia .username, .password, dan .newPassword. Tipe .username mengaktifkan pengelola kata sandi iCloud yang menawarkan akun yang tersimpan. Bidang dengan tipe .newPassword memulai pembuatan kata sandi aman melalui iCloud Keychain pada input pertama.
Mulai dari iOS 17, Apple menambahkan .oneTimeCode untuk kode konfirmasi SMS dan .shipmentTrackingNumber untuk melacak kiriman. Tipe .oneTimeCode secara otomatis mengenali kode dari pesan dan menawarkannya di bilah QuickType tanpa perlu membuka aplikasi Messages.
| Kategori | Tipe | iOS |
|---|---|---|
| Identifikasi | .name, .givenName, .familyName, .nickname | 5+ |
| Kontak | .emailAddress, .telephoneNumber, .fullStreetAddress | 5+ |
| Akun | .username, .password, .newPassword | 5+ |
| Lokasi | .location, .city, .state, .postalCode | 10+ |
| Data kartu | .creditCardNumber, .creditCardSecurityCode | 12+ |
| Kode sekali pakai | .oneTimeCode | 17+ |
Setiap tipe diwakili oleh konstanta string, tetapi perbandingannya harus dilakukan melalui operator ==, bukan melalui rawValue. iOS dapat menambahkan tipe baru di versi mendatang, oleh karena itu dalam switch-case selalu gunakan cabang default.
UIKeyboardType dan UITextContentType bekerja bersama: keyboard type menentukan tata letak keyboard, dan content type — tombol tambahan di bilah QuickType. Jika content type ditentukan, iOS dapat mengganti keyboard type untuk input yang optimal. Misalnya, dengan tipe `.emailAddress`, keyboard secara otomatis menampilkan simbol @ di lapisan utama.
Untuk bidang dengan tipe .telephoneNumber, iOS mengalihkan keyboard ke tata letak telepon terlepas dari keyboard type yang diatur. Perilaku ini tidak dapat dinonaktifkan — sistem menganggap prioritas content type lebih tinggi daripada konfigurasi keyboard eksplisit. Pengembang tidak perlu menduplikasi pengaturan kedua properti.
Tipe .URL dan .emailAddress masing-masing menambahkan tombol .com dan @ ke keyboard. Tipe .decimalPad dengan content type .creditCardNumber menampilkan keyboard numerik dengan pemisah desimal, yang nyaman untuk memasukkan jumlah dan nomor kartu. Menurut Apple Human Interface Guidelines, pengguna mengharapkan keyboard sesuai dengan tipe data yang dimasukkan, bukan sebaliknya.
Pengecualian adalah .oneTimeCode — tipe ini tidak mengubah tata letak keyboard, tetapi mengaktifkan bilah QuickType dengan kode dari SMS. Pengguna melihat saran kode di atas keyboard dan dapat memasukkannya dengan satu ketukan. Mekanisme ini hanya berfungsi untuk bidang yang menjadi first responder setelah menerima SMS.
Pengisian otomatis di iOS menggunakan Text Content Type untuk mencocokkan bidang input dengan data dari iCloud Keychain dan ASCredentialProviderViewController. Sistem menganalisis semua bidang di layar, menentukan tipe semantiknya, dan menawarkan data tersimpan yang sesuai. Tanpa tipe yang ditentukan dengan benar, pengisian otomatis tidak akan aktif.
Untuk pengisian otomatis berfungsi, tiga kondisi harus dipenuhi. Pertama — bidang harus memiliki UITextContentType yang benar. Kedua — layar harus berisi setidaknya dua bidang dengan tipe berbeda (misalnya, .username dan .password). Ketiga — aplikasi harus mendukung Associated Domains dengan entitlement webcredentials untuk sinkronisasi dengan situs web.
Gantungan kunci (Keychain) menggunakan content type untuk mengklasifikasikan catatan yang tersimpan. Jika bidang ditandai sebagai .password, sistem menyimpan nilai yang dimasukkan ke iCloud Keychain dan menawarkannya saat masuk berikutnya. Bidang dengan tipe .creditCardNumber secara otomatis disimpan di Wallet setelah konfirmasi melalui Face ID.
Untuk kode sekali pakai tipe .oneTimeCode, iOS 17 menggunakan mekanisme AutoFill OTP baru yang tidak memerlukan akses langsung ke SMS. Sistem mencegat kode dari pesan di tingkat sistem operasi dan meneruskannya ke aplikasi melalui bilah QuickType, tanpa perlu membaca konten pesan oleh aplikasi.
Konfigurasi dasar Text Content Type di Swift dilakukan melalui properti textContentType dalam kode atau melalui Interface Builder. Dalam kode, penugasan konstanta memakan satu baris, dan di IB tipe yang diinginkan dipilih dari daftar drop-down di inspector atribut.
let emailField = UITextField()
emailField.textContentType = .emailAddress
emailField.placeholder = "example@domain.com"
let passwordField = UITextField()
passwordField.isSecureTextEntry = true
passwordField.textContentType = .newPassword
Untuk pembuatan formulir masuk secara terprogram dengan pengisian otomatis, gunakan kedua bidang dengan content type yang berbeda. Sistem akan secara otomatis menghubungkannya sebagai nama pengguna dan kata sandi. Jika aplikasi mendukung masuk biometrik, tambahkan bidang dengan tipe .username untuk pengenalan akun yang benar.
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
}
}
Untuk bidang input kode sekali pakai dari SMS, tentukan tipe .oneTimeCode. Sistem akan secara otomatis menyarankan kode di bilah QuickType setelah menerimanya. Pengembang tidak perlu meminta izin membaca SMS atau mengimplementasikan parser pesan sendiri.
let otpField = UITextField()
otpField.textContentType = .oneTimeCode
otpField.keyboardType = .numberPad
otpField.placeholder = "Code from SMS"
Untuk iOS 17+, tipe .oneTimeCode mendukung pengisian otomatis tanpa fokus pada bidang. Jika pengguna menerima SMS dengan kode, iOS menawarkannya di layar kunci, dan setelah membuka kunci, kode secara otomatis dimasukkan ke bidang aktif dengan content type yang sesuai.
Pemilihan tipe yang benar secara langsung memengaruhi konversi formulir dan pengalaman pengguna. Apple sangat merekomendasikan untuk menentukan tipe yang paling spesifik dari yang tersedia. Misalnya, untuk bidang nama, gunakan .givenName, bukan .name umum — ini akan memungkinkan sistem menawarkan pengisian otomatis dari kontak dengan nama yang benar.
Hindari kesalahan umum — mengatur .emailAddress untuk bidang username. Jika aplikasi menggunakan email sebagai nama pengguna, tentukan tipe .username untuk bidang masuk dan .password untuk bidang kata sandi. Tipe .emailAddress ditujukan khusus untuk bidang input email sebagai data kontak, bukan sebagai pengidentifikasi.
Untuk formulir dengan beberapa bidang dengan tipe yang sama (misalnya, dua alamat email), gunakan properti .textContentType untuk setiap bidang, tetapi tambahkan pengidentifikasi accessibilityIdentifier yang berbeda. Ini akan membantu VoiceOver mengumumkan bidang dengan benar, meskipun sistem pengisian otomatis mungkin menawarkan opsi yang sama untuk kedua bidang.
Uji pengisian otomatis pada perangkat nyata dengan gantungan kunci yang terisi. Simulator tidak mendukung iCloud Keychain sepenuhnya, dan perilaku pengisian otomatis mungkin berbeda. Menurut Apple Developer Forums (2025), masalah paling umum dengan pengisian otomatis justru disebabkan oleh content type yang tidak ditentukan dengan benar.
Pertanyaan yang Sering Diajukan
UITextContentType menentukan tipe data semantik, sedangkan UIKeyboardType menentukan tata letak keyboard. Content type dapat mengganti keyboard type untuk input yang optimal.
Pengisian otomatis diaktifkan oleh tipe .username, .password, .newPassword, .emailAddress, .telephoneNumber, dan .creditCardNumber. Sistem mencocokkan tipe ini dengan data dari gantungan kunci.
Ya, WKWebView mendukung Text Content Type untuk bidang HTML dengan atribut autocomplete. iOS secara otomatis mencocokkan atribut autocomplete dengan tipe UITextContentType.
Ya, UITextView juga mewarisi UITextInputTraits dan mendukung properti textContentType. Ini berguna untuk bidang input data kontak multi-baris.
Sistem dapat menyarankan data yang salah untuk pengisian otomatis atau tidak menyarankan apa pun. Misalnya, bidang username dengan tipe .emailAddress dapat memasukkan email alih-alih nama pengguna.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga