การพิมพ์ตัวใหญ่แบบอัตโนมัติ เป็นกลไกของ iOS ที่แปลงอักษรตัวแรกของข้อความที่ป้อนเป็นตัวพิมพ์ใหญ่โดยอัตโนมัติในบริบทที่กำหนด UIKit มีคุณสมบัติ autocapitalizationType ในโปรโตคอล UITextInputTraits พร้อมสี่โหมด: none, words, sentences และ allCharacters ตาม Apple Text Programming Guide (2025) การกำหนดค่าการพิมพ์ตัวใหญ่แบบอัตโนมัติที่ถูกต้องช่วยปรับปรุงประสบการณ์ผู้ใช้และลดจำนวนการแก้ไขด้วยตนเองระหว่างการป้อนข้อมูล ใช้โหมด sentences สำหรับช่องข้อความส่วนใหญ่ และ none สำหรับชื่อผู้ใช้และรหัสผ่าน
ประเด็นสำคัญ
การพิมพ์ตัวใหญ่แบบอัตโนมัติ เป็นคุณสมบัติของระบบปฏิบัติการ iOS ที่แปลงอักขระตัวแรกของข้อความเป็นตัวพิมพ์ใหญ่โดยอัตโนมัติเมื่อตรงตามเงื่อนไขที่กำหนด กลไกนี้ถูกควบคุมผ่านคุณสมบัติ autocapitalizationType ซึ่งมีให้สำหรับองค์ประกอบทั้งหมดที่ใช้โปรโตคอล UITextInputTraits: UITextField, UITextView และ UISearchBar
คุณสมบัตินี้ทำงานในระดับ เอนจินข้อความของ iOS และจะทำงานเมื่อมีการป้อนอักขระแต่ละตัว ระบบจะวิเคราะห์ตำแหน่งเคอร์เซอร์และข้อความโดยรอบเพื่อพิจารณาว่าควรทำให้อักขระที่ป้อนปัจจุบันเป็นตัวพิมพ์ใหญ่หรือไม่ หากตรงตามเงื่อนไข iOS จะแทนที่อักษรตัวเล็กด้วยตัวพิมพ์ใหญ่โดยอัตโนมัติก่อนที่จะแสดงในช่อง
ตาม Apple Human Interface Guidelines (2025) การพิมพ์ตัวใหญ่แบบอัตโนมัติเป็นส่วนหนึ่งของระบบป้อนข้อมูลเชิงทำนายที่กว้างขึ้นซึ่งรวมถึงการแก้ไขอัตโนมัติและการป้อนข้อความเชิงทำนาย ผู้ใช้สามารถปิดคุณสมบัติทั้งหมดเหล่านี้ได้ทั่วโลกในการตั้งค่าระบบ (การตั้งค่า > ทั่วไป > แป้นพิมพ์) แต่นักพัฒนาก็ควบคุมได้ในระดับช่องเฉพาะเช่นกัน
ซึ่งแตกต่างจากการแก้ไขอัตโนมัติ การพิมพ์ตัวใหญ่แบบอัตโนมัติไม่ได้ใช้ แบบจำลองภาษา — มันทำงานด้วยกฎง่ายๆ: หลังจุดและช่องว่าง ที่จุดเริ่มต้นของข้อความ หลังอักขระขึ้นบรรทัดใหม่ ข้อยกเว้นคือโหมด words ซึ่งอักษรตัวแรกของแต่ละคำจะเป็นตัวพิมพ์ใหญ่โดยไม่คำนึงถึงบริบท
UITextAutocapitalizationType เป็นการแจงนับสี่ค่าที่กำหนดกลยุทธ์การแปลงตัวพิมพ์ใหญ่อัตโนมัติ แต่ละโหมดออกแบบมาสำหรับช่องข้อความประเภทเฉพาะและแก้ไขงานประสบการณ์ผู้ใช้โดยเฉพาะ
โหมด .none ปิดการแปลงตัวพิมพ์ใหญ่อัตโนมัติโดยสมบูรณ์ อักขระทั้งหมดจะถูกป้อนในรูปแบบที่ผู้ใช้พิมพ์ โหมดนี้จำเป็นสำหรับช่องรหัสผ่าน ที่อยู่อีเมล ชื่อเล่น คำค้นหา และช่องใดๆ ที่ตัวพิมพ์มีความสำคัญต่อการประมวลผลข้อมูลฝั่งเซิร์ฟเวอร์
โหมด .words ทำให้อักษรตัวแรกของแต่ละคำที่ป้อนเป็นตัวพิมพ์ใหญ่ ระบบกำหนดขอบเขตของคำด้วยช่องว่างและแปลงอักขระตัวแรกหลังช่องว่างเป็นตัวพิมพ์ใหญ่ โหมดนี้สะดวกสำหรับช่องชื่อ นามสกุล ชื่อเมือง ชื่อถนน และช่องอื่นๆ ที่แต่ละคำควรขึ้นต้นด้วยตัวพิมพ์ใหญ่
โหมด .sentences เป็นโหมดที่พบบ่อยที่สุดและใช้เป็นค่าเริ่มต้นสำหรับช่องข้อความส่วนใหญ่ ระบบจะทำให้อักษรตัวแรกหลังจุด เครื่องหมายอัศเจรีย์ หรือเครื่องหมายคำถามตามด้วยช่องว่างเป็นตัวพิมพ์ใหญ่ โหมดนี้เหมาะสำหรับบันทึก ข้อความ ความคิดเห็น และช่องข้อความหลายบรรทัดอื่นๆ
โหมด .allCharacters แปลงอักขระที่ป้อนทั้งหมดเป็นตัวพิมพ์ใหญ่ โหมดนี้เทียบเท่ากับการกด Caps Lock ค้างไว้และใช้สำหรับช่องที่ข้อมูลต้องเป็นตัวพิมพ์ใหญ่: รหัสไปรษณีย์ รหัสประเทศ ตัวย่อ หมายเลขคำสั่งซื้อ ควรใช้ด้วยความระมัดระวังเนื่องจากข้อความตัวพิมพ์ใหญ่อ่านยากกว่า
| โหมด | คำอธิบาย | ตัวอย่างการป้อน | คำแนะนำ |
|---|---|---|---|
| .none | ไม่มีการเปลี่ยนแปลง | somchai@mail.com | อีเมล รหัสผ่าน ค้นหา |
| .words | แต่ละคำ | สมชาย ใจดี | ชื่อ ที่อยู่ เมือง |
| .sentences | ต้นประโยค | สวัสดี สบายดีไหม? | ข้อความ บันทึก |
| .allCharacters | ตัวพิมพ์ใหญ่ทั้งหมด | ABC-123 | รหัส ดัชนี |
กลไกการพิมพ์ตัวใหญ่แบบอัตโนมัติ จะทำงานระหว่างการประมวลผลการกดแป้น ก่อนที่อักขระจะแสดงบนหน้าจอ เมื่อผู้ใช้กดแป้น UITextInputTraits จะตรวจสอบตำแหน่งเคอร์เซอร์ปัจจุบันและใช้กฎการแปลงตัวพิมพ์ตาม autocapitalizationType ที่ตั้งไว้
สำหรับโหมด .sentences ระบบจะติดตามอักขระทริกเกอร์: จุด (.) เครื่องหมายอัศเจรีย์ (!) เครื่องหมายคำถาม (?) และอักขระขึ้นบรรทัดใหม่ ( ) เมื่อเปิดใช้งาน หลังจากตรวจพบอักขระทริกเกอร์และช่องว่างที่ตามมา ระบบจะตั้งค่าแฟล็ก “คาดหวังตัวพิมพ์ใหญ่” สำหรับอักขระที่ป้อนถัดไป
โหมด .words ติดตามอักขระช่องว่างเป็นทริกเกอร์ หลังจากแต่ละช่องว่าง ระบบจะคาดหวังตัวพิมพ์ใหญ่สำหรับคำถัดไป อย่างไรก็ตาม มีข้อยกเว้น: หลังยัติภังค์ อะพอสทรอฟี และเครื่องหมายวรรคตอนอื่นๆ ภายในคำ จะไม่ใส่ตัวพิมพ์ใหญ่ ตัวอย่างเช่น “O’Brien” จะยังคงถูกต้อง
คุณสมบัติที่สำคัญคือการพิมพ์ตัวใหญ่แบบอัตโนมัติทำงานเฉพาะกับ อักขระตัวแรก ของคำ หากผู้ใช้ป้อนคำที่มีตัวพิมพ์ใหญ่อยู่ตรงกลาง (เช่น iPhone หรือ macOS) ระบบจะไม่เปลี่ยนแปลง เนื่องจากการแปลงใช้เฉพาะกับอักขระตัวแรกหลังทริกเกอร์เท่านั้น ซึ่งหมายความว่าชื่อแบรนด์และผลิตภัณฑ์ที่มีตัวพิมพ์ไม่มาตรฐานจะไม่ได้รับผลกระทบ
ควรปิดการพิมพ์ตัวใหญ่แบบอัตโนมัติ ในช่องที่ตัวพิมพ์มีความสำคัญต่อการประมวลผลข้อมูลที่ถูกต้อง กรณีทั่วไป: ช่องที่อยู่อีเมล ชื่อเล่นและชื่อผู้ใช้ รหัสผ่าน คำค้นหา URL รหัสยืนยัน IMEI และหมายเลขซีเรียล ในทุกกรณีเหล่านี้ การเปลี่ยนตัวพิมพ์โดยอัตโนมัติจะทำให้เกิดข้อผิดพลาดระหว่างการประมวลผลฝั่งเซิร์ฟเวอร์
สำหรับ ช่องค้นหา (UISearchBar) การพิมพ์ตัวใหญ่แบบอัตโนมัติถูกปิดโดยค่าเริ่มต้น ซึ่งตรงกับความคาดหวังของผู้ใช้ สามารถป้อนคำค้นหาในตัวพิมพ์ใดก็ได้ และเซิร์ฟเวอร์มักจะแปลงเป็นตัวพิมพ์เล็กเอง หากเปิดการพิมพ์ตัวใหญ่แบบอัตโนมัติสำหรับการค้นหา ผู้ใช้จะต้องแก้ไขตัวพิมพ์ใหญ่ที่จุดเริ่มต้นของแต่ละคำค้นหาด้วยตนเอง
ใน แบบฟอร์มลงทะเบียน ช่องชื่อผู้ใช้หรือชื่อเล่นควรมีโหมด .none เนื่องจากหลายระบบแยกความแตกต่างของตัวพิมพ์ในชื่อผู้ใช้ ช่องอีเมลก็ควรไม่มีการพิมพ์ตัวใหญ่แบบอัตโนมัติเช่นกัน — แม้ว่าชื่อโดเมนจะไม่คำนึงถึงตัวพิมพ์ แต่ส่วนท้องถิ่นของอีเมลในทางทฤษฎีอาจคำนึงถึงตัวพิมพ์ได้ แม้ว่าในทางปฏิบัติจะพบได้ยาก
ตาม เอกสารสำหรับนักพัฒนา Apple ช่องที่มี secureTextEntry (รหัสผ่าน) จะรับค่า autocapitalizationType = .none โดยอัตโนมัติ แม้ว่านักพัฒนาจะตั้งค่าอื่นอย่างชัดแจ้งก็ตาม ระบบมีลำดับความสำคัญสูงสุดสำหรับการป้อนข้อมูลที่ปลอดภัยและละเว้นความพยายามใดๆ ในการเปิดการพิมพ์ตัวใหญ่แบบอัตโนมัติสำหรับช่องรหัสผ่าน
การกำหนดค่าการพิมพ์ตัวใหญ่แบบอัตโนมัติ ใน Swift ทำผ่านคุณสมบัติ autocapitalizationType คุณสมบัตินี้มีให้สำหรับ UITextField, UITextView และ UISearchBar สามารถตั้งค่าได้ทั้งในโค้ดและผ่าน Interface Builder ในตัวตรวจสอบคุณสมบัติ ซึ่งโหมดนี้เรียกว่า Capitalization
let nameField = UITextField()
nameField.autocapitalizationType = .words
let emailField = UITextField()
emailField.autocapitalizationType = .none
สำหรับ แบบฟอร์มติดต่อ ให้กำหนดค่าแต่ละช่องตามความหมายของมัน: ชื่อ — .words, อีเมล — .none, ข้อความ — .sentences การผสมผสานนี้มอบประสบการณ์ผู้ใช้ที่ดีที่สุดและลดความจำเป็นในการแก้ไขตัวพิมพ์ด้วยตนเอง
class ContactFormViewController: UIViewController {
@IBOutlet var nameField: UITextField!
@IBOutlet var emailField: UITextField!
@IBOutlet var messageView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
nameField.autocapitalizationType = .words
emailField.autocapitalizationType = .none
messageView.autocapitalizationType = .sentences
}
}
สำหรับ การเปลี่ยนโหมดโดยทางโปรแกรม ในขณะรันไทม์ ให้ใช้ตัวแทน UITextFieldDelegate ตัวอย่างเช่น หากช่องสามารถใช้ในบริบทที่แตกต่างกัน ให้เปลี่ยน autocapitalizationType ในเมธอด textFieldDidBeginEditing ตามโหมดการทำงานปัจจุบันของแบบฟอร์ม
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField === codeField {
textField.autocapitalizationType = .allCharacters
}
}
การพิมพ์ตัวใหญ่แบบอัตโนมัติ ขึ้นอยู่กับภาษาที่ป้อนบนแป้นพิมพ์ของผู้ใช้ ภาษาอาจมีกฎการแปลงตัวพิมพ์ที่แตกต่างกัน ตัวอย่างเช่น ในภาษาตุรกี อักษร “i” ในตัวพิมพ์ใหญ่จะกลายเป็น “İ” (มีจุด) ในขณะที่ “I” ในตัวพิมพ์เล็กจะกลายเป็น “ı” (ไม่มีจุด) iOS จัดการคุณสมบัติเหล่านี้โดยอัตโนมัติ
สำหรับ ภาษารัสเซีย การพิมพ์ตัวใหญ่แบบอัตโนมัติเป็นไปตามกฎเดียวกันกับภาษาอังกฤษ: ตัวพิมพ์ใหญ่หลังจุด ที่จุดเริ่มต้นของประโยค และหลังขึ้นบรรทัดใหม่ ปัญหาอาจเกิดขึ้นกับอักษร “yo” — แม้ว่าจะมีอยู่ในพจนานุกรมระบบ แต่ไม่ใช่ทุกผังแป้นพิมพ์จะแสดงบนเลเยอร์หลัก และการพิมพ์ตัวใหญ่แบบอัตโนมัติจะแปลง “yo” เป็น “Yo” อย่างถูกต้อง
สำหรับ ภาษาจีน ญี่ปุ่น และเกาหลี การพิมพ์ตัวใหญ่แบบอัตโนมัติไม่สามารถใช้ได้ เนื่องจากภาษาเหล่านี้ไม่มีแนวคิดเรื่องตัวพิมพ์ โหมด autocapitalizationType จะถูกละเว้นโดยระบบเมื่อใช้แป้นพิมพ์ที่เกี่ยวข้อง และช่องจะทำงานเช่นเดียวกับในโหมด .none โดยไม่คำนึงถึงค่าที่ตั้งไว้
สำหรับ ภาษาอาหรับ และฮีบรู การพิมพ์ตัวใหญ่แบบอัตโนมัติก็ไม่สามารถใช้ได้เช่นกัน เนื่องจากภาษาเหล่านี้ใช้ระบบการเขียนของตนเองโดยไม่มีการแบ่งแยกระหว่างตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ระบบ iOS ตรวจจับภาษาที่ป้อนได้อย่างถูกต้องและละเว้นการตั้งค่าการพิมพ์ตัวใหญ่แบบอัตโนมัติสำหรับภาษาที่ไม่มีแนวคิดนี้
คำถามที่พบบ่อย
ได้ คุณสมบัติ autocapitalizationType สามารถเปลี่ยนแปลงได้ตลอดเวลา แม้เมื่อช่องทำงานอยู่แล้ว การเปลี่ยนแปลงจะมีผลในการป้อนอักขระครั้งถัดไป
ได้ สำหรับช่องที่มี isSecureTextEntry = true ระบบจะตั้งค่า autocapitalizationType = .none โดยอัตโนมัติ ไม่สามารถเปลี่ยนพฤติกรรมนี้โดยทางโปรแกรมได้
ได้ UITextView รองรับ autocapitalizationType อย่างสมบูรณ์ ซึ่งมีประโยชน์โดยเฉพาะสำหรับช่องหลายบรรทัดที่โหมด .sentences ทำงานเป็นธรรมชาติที่สุด
หากช่องไม่ได้ทำเครื่องหมายเป็น secureTextEntry แต่ใช้สำหรับป้อนรหัสผ่าน การพิมพ์ตัวใหญ่แบบอัตโนมัติสามารถ เปลี่ยนรหัสผ่าน ได้ ปิดการใช้งานเสมอสำหรับช่องที่ตัวพิมพ์มีความสำคัญ
บน เครื่องจำลอง การพิมพ์ตัวใหญ่แบบอัตโนมัติทำงานผ่านแป้นพิมพ์ฮาร์ดแวร์ของ Mac และอาจทำงานแตกต่างกัน ทดสอบบนอุปกรณ์จริงเพื่อพฤติกรรมที่ถูกต้อง
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม