Text Content Type, bir metin alanının hangi verileri beklediğini sisteme bildiren iOS mekanizmasıdır. UIKit, giriş alanlarını işaretlemek için UITextContentType sabitleri sağlar: e-posta, şifre, telefon, kullanıcı adı ve düzinelerce diğer anlamsal tür. Apple Human Interface Guidelines (2025)'e göre, doğru içerik türü yapılandırması, otomatik doldurma ve uyarlanabilir klavye sayesinde form doldurma hızını %40 artırır. Her metin alanında UITextContentType kullanın — kullanıcı deneyimini iyileştirir ve giriş hatalarını azaltır.
Kilit Noktalar
Text Content Type (UITextContentType), giriş alanının hangi anlamsal verileri beklediğini iOS'a bildiren UIKit metin alanı özelliğidir. Sistem bu bilgiyi iki amaç için kullanır: uygun klavye düzenini seçmek ve anahtarlıktan (iCloud Keychain) otomatik doldurma mekanizmasını etkinleştirmek.
iOS 5, anlamsal türlerin ilk sürümünü tanıttı ve iOS 17'de UITextContentType seti 34 sabite genişleyerek tek kullanımlık kodlar, posta kodları ve sokak adları için yeni türler ekledi. Her sabit, sistemin iç işleme kurallarına eşlediği bir dizeyi temsil eder.
Mekanizma UITextInputTraits seviyesinde çalışır — UITextField, UITextView ve UISearchBar tarafından miras alınan bir protokol. Bu, içerik türünün ek yapılandırma gerektirmeden tüm standart giriş öğelerinde kullanılabilir olduğu anlamına gelir.
WWDC 2024 Oturum 101'e göre Apple, arayüzdeki her metin alanı için bir içerik türü belirtilmesini önerir — otomatik doldurma beklenmese bile. İşaretlemenin kendisi, VoiceOver'ın engelli kullanıcılar için alanın amacını doğru şekilde duyurmasına yardımcı olur.
UIKit, kategorilere ayrılmış bir tür hiyerarşisi sağlar. Ana gruplar tanımlama verileri (ad, soyad, kullanıcı adı), iletişim bilgileri (e-posta, telefon, adres) ve kimlik bilgileri (şifre, tek kullanımlık kod) içerir. Her grup farklı otomatik doldurma mekanizmalarını etkinleştirir.
İletişim türleri grubu `.emailAddress`, `.telephoneNumber`, `.fullStreetAddress` ve `.city` içerir. Bu türler, kişilerden ve iCloud Keychain'den otomatik doldurmayı etkinleştirir. `.emailAddress` türündeki bir alan, daha önce girilen e-posta adreslerini otomatik olarak önerirken, `.telephoneNumber` adres defterinden telefon numaralarını önerir.
Oturum açma alanları için .username, .password ve .newPassword tasarlanmıştır. .username türü, kaydedilmiş kimlik bilgilerini sunan iCloud şifre yöneticisini etkinleştirir. .newPassword türündeki bir alan, ilk girişte iCloud Keychain aracılığıyla güçlü şifre oluşturmayı başlatır.
iOS 17'den itibaren Apple, SMS onay kodları için .oneTimeCode ve paket takibi için .shipmentTrackingNumber ekledi. .oneTimeCode türü, mesajlardaki kodları otomatik olarak tanır ve Mesajlar uygulamasını açmaya gerek kalmadan QuickType çubuğunda sunar.
| Kategori | Türler | iOS |
|---|---|---|
| Tanımlama | .name, .givenName, .familyName, .nickname | 5+ |
| Kişiler | .emailAddress, .telephoneNumber, .fullStreetAddress | 5+ |
| Kimlik Bilgileri | .username, .password, .newPassword | 5+ |
| Konum | .location, .city, .state, .postalCode | 10+ |
| Kart Verileri | .creditCardNumber, .creditCardSecurityCode | 12+ |
| Tek Kullanımlık Kodlar | .oneTimeCode | 17+ |
Her tür bir dize sabiti ile temsil edilir, ancak rawValue yerine == operatörü kullanılarak karşılaştırılmalıdır. iOS gelecek sürümlerde yeni türler ekleyebilir, bu nedenle switch-case ifadelerinde her zaman bir default dalı kullanın.
UIKeyboardType ve UITextContentType birlikte çalışır: klavye türü klavye düzenini belirlerken, içerik türü QuickType çubuğuna ek düğmeler ekler. Bir içerik türü ayarlandığında, iOS optimum giriş için klavye türünü geçersiz kılabilir. Örneğin, `.emailAddress` türünde klavye ana katmanda otomatik olarak @ sembolünü gösterir.
.telephoneNumber türündeki bir alan için iOS, ayarlanan klavye türünden bağımsız olarak klavyeyi telefon düzenine geçirir. Bu davranış devre dışı bırakılamaz — sistem içerik türünün önceliğini açık klavye yapılandırmasından daha yüksek kabul eder. Geliştiricilerin her iki özelliği de yapılandırması gerekmez.
.URL ve .emailAddress türleri, klavyeye sırasıyla .com ve @ düğmeleri ekler. .creditCardNumber içerik türüyle .decimalPad türü, ondalık ayırıcılı sayısal bir klavye gösterir; bu, tutar ve kart numarası girmek için kullanışlıdır. Apple Human Interface Guidelines'a göre, kullanıcılar klavyenin girilen veri türüyle eşleşmesini bekler, tersi değil.
Bir istisna .oneTimeCode'dur — bu tür klavye düzenini değiştirmez ancak SMS'lerden gelen kodlarla QuickType çubuğunu etkinleştirir. Kullanıcı klavyenin üzerinde bir kod önerisi görür ve tek dokunuşla ekleyebilir. Mekanizma yalnızca SMS aldıktan sonra first responder olan alanlar için çalışır.
iOS'taki otomatik doldurma, giriş alanlarını iCloud Keychain ve ASCredentialProviderViewController verileriyle eşleştirmek için Text Content Type'ı kullanır. Sistem ekrandaki tüm alanları analiz eder, anlamsal türlerini belirler ve ilgili kaydedilmiş verileri sunar. Türler doğru şekilde belirtilmeden otomatik doldurma etkinleştirilmez.
Otomatik doldurmanın çalışması için üç koşulun karşılanması gerekir. Birincisi, alanın doğru bir UITextContentType'a sahip olması gerekir. İkincisi, ekranın farklı türlerde en az iki alan içermesi gerekir (örneğin, .username ve .password). Üçüncüsü, uygulamanın bir web sitesiyle senkronizasyon için webcredentials yetkisiyle Associated Domains'i desteklemesi gerekir.
Anahtarlık (Keychain), kaydedilmiş kayıtları sınıflandırmak için içerik türünü kullanır. Bir alan .password olarak işaretlenmişse, sistem girilen değeri iCloud Keychain'de saklar ve bir sonraki oturum açmada sunar. .creditCardNumber türündeki alanlar, Face ID onayından sonra otomatik olarak Wallet'a kaydedilir.
.oneTimeCode türündeki tek kullanımlık kodlar için iOS 17, doğrudan SMS erişimi gerektirmeyen yeni AutoFill OTP mekanizmasını kullanır. Sistem, işletim sistemi düzeyinde mesajlardaki kodları yakalar ve uygulamanın mesaj içeriğini okumasını atlayarak QuickType çubuğu aracılığıyla uygulamaya iletir.
Swift'te Text Content Type'ın temel yapılandırması, kod içinde textContentType özelliği veya Interface Builder aracılığıyla yapılır. Kodda, bir sabit ataması bir satır sürerken, IB'de istenen tür özellik denetçisindeki bir açılır menüden seçilir.
let emailField = UITextField()
emailField.textContentType = .emailAddress
emailField.placeholder = "example@domain.com"
let passwordField = UITextField()
passwordField.isSecureTextEntry = true
passwordField.textContentType = .newPassword
Otomatik doldurma ile programlı olarak oturum açma formu oluşturmak için, farklı içerik türlerine sahip her iki alanı da kullanın. Sistem bunları otomatik olarak oturum açma ve şifre olarak ilişkilendirir. Uygulama biyometrik oturum açmayı destekliyorsa, doğru hesap tanıma için .username türünde bir alan ekleyin.
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'den tek kullanımlık kod giriş alanı için .oneTimeCode türünü belirtin. Sistem, kodu aldıktan sonra QuickType çubuğunda otomatik olarak önerecektir. Geliştiricinin SMS okuma izni istemesi veya özel mesaj ayrıştırma uygulaması gerekmez.
let otpField = UITextField()
otpField.textContentType = .oneTimeCode
otpField.keyboardType = .numberPad
otpField.placeholder = "Code from SMS"
iOS 17+ için .oneTimeCode türü, alan odağı olmadan otomatik doldurmayı destekler. Kullanıcı kod içeren bir SMS alırsa, iOS kodu kilit ekranında sunar ve kilidi açtıktan sonra kod, ilgili içerik türüne sahip etkin alana otomatik olarak eklenir.
Doğru türü seçmek doğrudan form dönüşümünü ve kullanıcı deneyimini etkiler. Apple, mevcut en spesifik türün belirtilmesini şiddetle önerir. Örneğin, ad alanı için genel .name yerine .givenName kullanın — bu, sistemin kişilerden doğru adla otomatik doldurma önermesine olanak tanır.
Yaygın bir hatadan kaçının — bir kullanıcı adı alanı için .emailAddress ayarlamak. Uygulama e-postayı oturum açma olarak kullanıyorsa, oturum açma alanı için .username ve şifre alanı için .password belirtin. .emailAddress türü, yalnızca bir tanımlayıcı olarak değil, iletişim verisi olarak e-posta girişi için tasarlanmıştır.
Aynı türde birden çok alanı olan formlar için (örneğin, iki e-posta adresi), her alan için .textContentType özelliğini ayarlayın ancak farklı accessibilityIdentifier değerleri ekleyin. Bu, VoiceOver'ın alanları doğru şekilde duyurmasına yardımcı olur, ancak otomatik doldurma sistemi her iki alan için de aynı değeri önerebilir.
Dolu bir anahtarlıkla gerçek bir cihazda otomatik doldurmayı test edin. Simülatör iCloud Keychain'i tam olarak desteklemez ve otomatik doldurma davranışı farklılık gösterebilir. Apple Developer Forums (2025)'e göre, en yaygın otomatik doldurma sorunları, yanlış belirtilmiş içerik türünden kaynaklanır.
Sıkça Sorulan Sorular
UITextContentType anlamsal veri türünü tanımlarken, UIKeyboardType klavye düzenini tanımlar. İçerik türü, optimum giriş için klavye türünü geçersiz kılabilir.
Otomatik doldurma, .username, .password, .newPassword, .emailAddress, .telephoneNumber ve .creditCardNumber türleri tarafından etkinleştirilir. Sistem bu türleri anahtarlıktaki verilerle eşleştirir.
Evet, WKWebView, autocomplete özniteliğine sahip HTML alanları için Text Content Type'ı destekler. iOS, autocomplete özniteliklerini otomatik olarak UITextContentType türlerine eşler.
Evet, UITextView de UITextInputTraits'i miras alır ve textContentType özelliğini destekler. Bu, iletişim verileri için çok satırlı giriş alanlarında kullanışlıdır.
Sistem, otomatik doldurma için yanlış veriler önerebilir veya hiçbir şey önermeyebilir. Örneğin, .emailAddress türündeki bir kullanıcı adı alanı, oturum açma adı yerine bir e-posta önerebilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun