Text Content Type เป็นกลไกของ iOS ที่บอกระบบว่าช่องข้อความคาดหวังข้อมูลประเภทใด UIKit มีค่าคงที่ UITextContentType สำหรับทำเครื่องหมายช่องป้อนข้อมูล: อีเมล รหัสผ่าน โทรศัพท์ ชื่อผู้ใช้ และประเภทเชิงความหมายอื่นๆ อีกหลายสิบประเภท ตาม Apple Human Interface Guidelines (2025) การกำหนดประเภทเนื้อหาที่ถูกต้องช่วยเพิ่มความเร็วในการกรอกแบบฟอร์มได้ถึง 40% ผ่านการเติมข้อความอัตโนมัติและแป้นพิมพ์แบบปรับเปลี่ยนได้ ใช้ UITextContentType ในทุกช่องข้อความ — ช่วยปรับปรุงประสบการณ์ผู้ใช้และลดข้อผิดพลาดในการป้อนข้อมูล
ประเด็นสำคัญ
Text Content Type (UITextContentType) คือคุณสมบัติของช่องข้อความ UIKit ที่บอก iOS ว่าช่องป้อนข้อมูลคาดหวังข้อมูลเชิงความหมายประเภทใด ระบบใช้ข้อมูลนี้เพื่อสองวัตถุประสงค์: การเลือกรูปแบบแป้นพิมพ์ที่เหมาะสมและการเปิดใช้งานกลไกการเติมข้อความอัตโนมัติจากพวงกุญแจ (iCloud Keychain)
iOS 5 เปิดตัวประเภทเชิงความหมายรุ่นแรก และใน iOS 17 ชุด UITextContentType ได้ขยายเป็น 34 ค่าคงที่ รวมถึงประเภทใหม่สำหรับรหัสแบบใช้ครั้งเดียว รหัสไปรษณีย์ และชื่อถนน แต่ละค่าคงที่แทนสตริงที่ระบบจับคู่กับกฎการประมวลผลภายใน
กลไกนี้ทำงานในระดับ UITextInputTraits — โพรโทคอลที่ UITextField, UITextView และ UISearchBar สืบทอดมา ซึ่งหมายความว่าประเภทเนื้อหาพร้อมใช้งานในองค์ประกอบอินพุตมาตรฐานทั้งหมดโดยไม่ต้องกำหนดค่าเพิ่มเติม
ตาม WWDC 2024 Session 101 Apple แนะนำให้ระบุประเภทเนื้อหาสำหรับทุกช่องข้อความในอินเทอร์เฟซ — แม้ว่าจะไม่ได้คาดหวังการเติมข้อความอัตโนมัติก็ตาม การทำเครื่องหมายเองช่วยให้ VoiceOver ประกาศวัตถุประสงค์ของช่องได้อย่างถูกต้องสำหรับผู้ใช้ที่มีความบกพร่อง
UIKit มีลำดับชั้นของประเภทที่แบ่งตามหมวดหมู่ กลุ่มหลักประกอบด้วย ข้อมูลการระบุตัวตน (ชื่อ นามสกุล ชื่อผู้ใช้) ข้อมูลติดต่อ (อีเมล โทรศัพท์ ที่อยู่) และข้อมูลประจำตัว (รหัสผ่าน รหัสแบบใช้ครั้งเดียว) แต่ละกลุ่มจะเปิดใช้งานกลไกการเติมข้อความอัตโนมัติที่แตกต่างกัน
กลุ่ม ประเภทติดต่อ ประกอบด้วย `.emailAddress`, `.telephoneNumber`, `.fullStreetAddress` และ `.city` ประเภทเหล่านี้เปิดใช้งานการเติมข้อความอัตโนมัติจากรายชื่อติดต่อและ iCloud Keychain ช่องที่มีประเภท `.emailAddress` จะแนะนำที่อยู่อีเมลที่ป้อนก่อนหน้าโดยอัตโนมัติ ในขณะที่ `.telephoneNumber` จะแนะนำหมายเลขโทรศัพท์จากสมุดที่อยู่
สำหรับช่องเข้าสู่ระบบมี .username, .password และ .newPassword ประเภท .username เปิดใช้งานตัวจัดการรหัสผ่าน iCloud ซึ่งเสนอข้อมูลประจำตัวที่บันทึกไว้ ช่องที่มีประเภท .newPassword จะเริ่มสร้างรหัสผ่านที่รัดกุมผ่าน iCloud Keychain เมื่อป้อนข้อมูลครั้งแรก
ตั้งแต่ iOS 17 เป็นต้นไป Apple ได้เพิ่ม .oneTimeCode สำหรับรหัสยืนยันทาง SMS และ .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 อาจเพิ่มประเภทใหม่ในเวอร์ชันอนาคต ดังนั้นให้ใช้สาขา default ในคำสั่ง switch-case เสมอ
UIKeyboardType และ UITextContentType ทำงานร่วมกัน: ประเภทแป้นพิมพ์กำหนดรูปแบบแป้นพิมพ์ ในขณะที่ประเภทเนื้อหาเพิ่มปุ่มเพิ่มเติมในแถบ QuickType หากตั้งค่าประเภทเนื้อหา iOS อาจแทนที่ประเภทแป้นพิมพ์เพื่อการป้อนข้อมูลที่เหมาะสมที่สุด ตัวอย่างเช่น ด้วยประเภท `.emailAddress` แป้นพิมพ์จะแสดงสัญลักษณ์ @ บนเลเยอร์หลักโดยอัตโนมัติ
สำหรับช่องที่มีประเภท .telephoneNumber iOS จะสลับแป้นพิมพ์เป็นรูปแบบโทรศัพท์โดยไม่ขึ้นกับประเภทแป้นพิมพ์ที่ตั้งไว้ พฤติกรรมนี้ไม่สามารถปิดใช้งานได้ — ระบบถือว่าลำดับความสำคัญของประเภทเนื้อหาสูงกว่าการกำหนดค่าแป้นพิมพ์ที่ชัดเจน นักพัฒนาไม่จำเป็นต้องกำหนดค่าคุณสมบัติทั้งสอง
ประเภท .URL และ .emailAddress เพิ่มปุ่ม .com และ @ บนแป้นพิมพ์ตามลำดับ ประเภท .decimalPad กับประเภทเนื้อหา .creditCardNumber จะแสดงแป้นพิมพ์ตัวเลขพร้อมตัวคั่นทศนิยม ซึ่งสะดวกสำหรับการป้อนจำนวนเงินและหมายเลขบัตร ตาม Apple Human Interface Guidelines ผู้ใช้คาดหวังว่าแป้นพิมพ์จะตรงกับประเภทของข้อมูลที่ป้อน ไม่ใช่ในทางกลับกัน
ข้อยกเว้นคือ .oneTimeCode — ประเภทนี้ไม่เปลี่ยนรูปแบบแป้นพิมพ์ แต่เปิดใช้งานแถบ QuickType พร้อมรหัสจาก SMS ผู้ใช้เห็นคำแนะนำรหัสเหนือแป้นพิมพ์และสามารถแทรกได้ด้วยการแตะครั้งเดียว กลไกนี้ทำงานเฉพาะกับช่องที่กลายเป็น first responder หลังจากได้รับ SMS
การเติมข้อความอัตโนมัติ ใน iOS ใช้ Text Content Type เพื่อจับคู่ช่องป้อนข้อมูลกับข้อมูลจาก iCloud Keychain และ ASCredentialProviderViewController ระบบวิเคราะห์ช่องทั้งหมดบนหน้าจอ กำหนดประเภทเชิงความหมาย และเสนอข้อมูลที่บันทึกไว้ที่เกี่ยวข้อง หากไม่ได้ระบุประเภทอย่างถูกต้อง การเติมข้อความอัตโนมัติจะไม่เปิดใช้งาน
เพื่อให้การเติมข้อความอัตโนมัติทำงาน ต้องปฏิบัติตามเงื่อนไขสามประการ หนึ่ง ช่องต้องมี UITextContentType ที่ถูกต้อง สอง หน้าจอต้องมีอย่างน้อยสองช่องที่มีประเภทต่างกัน (เช่น .username และ .password) สาม แอปต้องรองรับ Associated Domains กับสิทธิ์ webcredentials สำหรับการซิงค์กับเว็บไซต์
พวงกุญแจ (Keychain) ใช้ประเภทเนื้อหาเพื่อจำแนกบันทึกที่บันทึกไว้ หากช่องถูกทำเครื่องหมายเป็น .password ระบบจะบันทึกค่าที่ป้อนใน iCloud Keychain และเสนอในการเข้าสู่ระบบครั้งถัดไป ช่องที่มีประเภท .creditCardNumber จะถูกบันทึกใน Wallet โดยอัตโนมัติหลังจากการยืนยันด้วย Face ID
สำหรับรหัสแบบใช้ครั้งเดียวประเภท .oneTimeCode iOS 17 ใช้กลไก AutoFill OTP ใหม่ ซึ่งไม่ต้องการการเข้าถึง SMS โดยตรง ระบบดักจับรหัสจากข้อความในระดับระบบปฏิบัติการและส่งต่อไปยังแอปผ่านแถบ QuickType โดยข้ามการอ่านเนื้อหาข้อความโดยแอป
การกำหนดค่า Text Content Type พื้นฐานใน Swift ทำได้ผ่านคุณสมบัติ textContentType ในโค้ดหรือผ่าน Interface Builder ในโค้ด การกำหนดค่าคงที่ใช้หนึ่งบรรทัด ในขณะที่ใน 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 แนะนำอย่างยิ่งให้ระบุประเภทที่เฉพาะเจาะจงที่สุดที่มีอยู่ ตัวอย่างเช่น ใช้ .givenName สำหรับช่องชื่อแทน .name ทั่วไป — ซึ่งช่วยให้ระบบแนะนำการเติมข้อความอัตโนมัติจากรายชื่อติดต่อด้วยชื่อที่ถูกต้อง
หลีกเลี่ยง ข้อผิดพลาดทั่วไป — การตั้งค่า .emailAddress สำหรับช่องชื่อผู้ใช้ หากแอปใช้อีเมลเป็นชื่อเข้าสู่ระบบ ให้ระบุ .username สำหรับช่องเข้าสู่ระบบและ .password สำหรับช่องรหัสผ่าน ประเภท .emailAddress มีไว้สำหรับการป้อนอีเมลเป็นข้อมูลติดต่อเท่านั้น ไม่ใช่เป็นตัวระบุ
สำหรับแบบฟอร์มที่มี หลายช่อง ประเภทเดียวกัน (เช่น ที่อยู่อีเมลสองที่) ให้ตั้งค่าคุณสมบัติ .textContentType สำหรับแต่ละช่อง แต่เพิ่มค่า accessibilityIdentifier ที่แตกต่างกัน ซึ่งช่วยให้ VoiceOver ประกาศช่องได้อย่างถูกต้อง แม้ว่าระบบเติมข้อความอัตโนมัติอาจแนะนำค่าเดียวกันสำหรับทั้งสองช่อง
ทดสอบการเติมข้อความอัตโนมัติบน อุปกรณ์จริง ที่มีพวงกุญแจที่มีข้อมูล โปรแกรมจำลองไม่รองรับ iCloud Keychain อย่างสมบูรณ์ และพฤติกรรมการเติมข้อความอัตโนมัติอาจแตกต่างกัน ตาม Apple Developer Forums (2025) ปัญหาการเติมข้อความอัตโนมัติที่พบบ่อยที่สุดเกิดจากประเภทเนื้อหาที่ระบุไม่ถูกต้อง
คำถามที่พบบ่อย
UITextContentType กำหนดประเภทข้อมูลเชิงความหมาย ในขณะที่ UIKeyboardType กำหนดรูปแบบแป้นพิมพ์ ประเภทเนื้อหาสามารถแทนที่ประเภทแป้นพิมพ์เพื่อการป้อนข้อมูลที่เหมาะสมที่สุด
การเติมข้อความอัตโนมัติถูกเปิดใช้งานโดยประเภท .username, .password, .newPassword, .emailAddress, .telephoneNumber และ .creditCardNumber ระบบจับคู่ประเภทเหล่านี้กับข้อมูลจากพวงกุญแจ
ใช่ WKWebView รองรับ Text Content Type สำหรับช่อง HTML ที่มีแอตทริบิวต์ autocomplete iOS จับคู่แอตทริบิวต์ autocomplete กับประเภท UITextContentType โดยอัตโนมัติ
ใช่ UITextView ก็สืบทอด UITextInputTraits และรองรับคุณสมบัติ textContentType ซึ่งมีประโยชน์สำหรับช่องป้อนข้อมูลหลายบรรทัดสำหรับข้อมูลติดต่อ
ระบบอาจแนะนำ ข้อมูลที่ไม่ถูกต้อง สำหรับการเติมข้อความอัตโนมัติหรือไม่แนะนำอะไรเลย ตัวอย่างเช่น ช่องชื่อผู้ใช้ที่มีประเภท .emailAddress อาจแนะนำอีเมลแทนชื่อเข้าสู่ระบบ
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม