Tự động viết hoa là một cơ chế iOS tự động chuyển đổi chữ cái đầu tiên của văn bản nhập thành chữ hoa trong một số ngữ cảnh nhất định. UIKit cung cấp thuộc tính autocapitalizationType trong giao thức UITextInputTraits với bốn chế độ: none, words, sentences và allCharacters. Theo Apple Text Programming Guide (2025), cấu hình tự động viết hoa đúng cách sẽ cải thiện trải nghiệm người dùng và giảm số lần sửa thủ công khi nhập. Sử dụng chế độ sentences cho hầu hết các trường văn bản và none cho tên người dùng và mật khẩu.
Những điểm chính
Tự động viết hoa là một tính năng của hệ điều hành iOS tự động chuyển đổi ký tự đầu tiên của văn bản thành chữ hoa khi đáp ứng một số điều kiện nhất định. Cơ chế được kiểm soát thông qua thuộc tính autocapitalizationType, có sẵn cho tất cả các phần tử triển khai giao thức UITextInputTraits: UITextField, UITextView và UISearchBar.
Tính năng này hoạt động ở cấp độ công cụ văn bản iOS và được kích hoạt tại thời điểm mỗi ký tự được nhập. Hệ thống phân tích vị trí con trỏ và văn bản xung quanh để xác định xem có cần viết hoa ký tự đầu vào hiện tại hay không. Nếu điều kiện được đáp ứng, iOS tự động thay thế chữ thường bằng chữ hoa trước khi nó hiển thị trong trường.
Theo Nguyên tắc Giao diện Người dùng Apple (2025), tự động viết hoa là một phần của hệ thống nhập dự đoán rộng hơn cũng bao gồm tự động sửa lỗi và nhập văn bản dự đoán. Người dùng có thể tắt tất cả các tính năng này trong cài đặt hệ thống (Cài đặt > Cài đặt chung > Bàn phím), nhưng nhà phát triển cũng kiểm soát chúng ở cấp độ trường cụ thể.
Không giống như tự động sửa lỗi, tự động viết hoa không sử dụng mô hình ngôn ngữ — nó hoạt động theo các quy tắc đơn giản: sau dấu chấm và khoảng trắng, ở đầu văn bản, sau ký tự xuống dòng. Ngoại lệ là chế độ words, nơi chữ cái đầu tiên của mỗi từ được viết hoa bất kể ngữ cảnh.
UITextAutocapitalizationType là một kiểu liệt kê bốn giá trị xác định chiến lược chuyển đổi chữ hoa/chữ thường tự động. Mỗi chế độ được thiết kế cho một loại trường văn bản cụ thể và giải quyết một tác vụ trải nghiệm người dùng cụ thể.
Chế độ .none tắt hoàn toàn tính năng chuyển đổi chữ hoa/chữ thường tự động. Tất cả các ký tự được nhập ở dạng người dùng gõ. Chế độ này bắt buộc cho trường mật khẩu, địa chỉ email, biệt danh, truy vấn tìm kiếm và bất kỳ trường nào mà chữ hoa/chữ thường quan trọng cho việc xử lý dữ liệu ở phía máy chủ.
Chế độ .words viết hoa chữ cái đầu tiên của mỗi từ được nhập. Hệ thống xác định ranh giới từ bằng khoảng trắng và chuyển đổi ký tự đầu tiên sau khoảng trắng thành chữ hoa. Chế độ này thuận tiện cho trường họ, tên, tên thành phố, tên đường và các trường khác mà mỗi từ nên bắt đầu bằng chữ hoa.
Chế độ .sentences phổ biến nhất và được sử dụng theo mặc định cho hầu hết các trường văn bản. Hệ thống viết hoa chữ cái đầu tiên sau dấu chấm, dấu chấm than hoặc dấu chấm hỏi theo sau là khoảng trắng. Chế độ này lý tưởng cho ghi chú, tin nhắn, bình luận và các trường văn bản nhiều dòng khác.
Chế độ .allCharacters chuyển đổi tất cả các ký tự được nhập thành chữ hoa. Chế độ này tương đương với việc giữ phím Caps Lock liên tục và được sử dụng cho các trường mà dữ liệu phải ở dạng chữ hoa: mã bưu chính, mã quốc gia, chữ viết tắt, số đơn hàng. Nên sử dụng một cách thận trọng vì văn bản chữ hoa khó đọc hơn.
| Chế độ | Mô tả | Ví dụ nhập | Khuyến nghị |
|---|---|---|---|
| .none | Không thay đổi | an@mail.com | Email, mật khẩu, tìm kiếm |
| .words | Mỗi từ | Nguyễn Văn An | Tên, địa chỉ, thành phố |
| .sentences | Đầu câu | Xin chào. Bạn khỏe không? | Tin nhắn, ghi chú |
| .allCharacters | Tất cả chữ hoa | ABC-123 | Mã, chỉ số |
Cơ chế tự động viết hoa được kích hoạt trong quá trình xử lý nhấn phím, trước khi ký tự hiển thị trên màn hình. Khi người dùng nhấn một phím, UITextInputTraits kiểm tra vị trí con trỏ hiện tại và áp dụng quy tắc chuyển đổi chữ hoa/chữ thường theo autocapitalizationType đã đặt.
Đối với chế độ .sentences, hệ thống theo dõi các ký tự kích hoạt: dấu chấm (.), dấu chấm than (!), dấu chấm hỏi (?) và ký tự xuống dòng ( ) khi được bật. Sau khi phát hiện ký tự kích hoạt và khoảng trắng theo sau, hệ thống đặt cờ “chờ chữ hoa” cho ký tự đầu vào tiếp theo.
Chế độ .words theo dõi ký tự khoảng trắng làm kích hoạt. Sau mỗi khoảng trắng, hệ thống mong đợi một chữ hoa cho từ tiếp theo. Tuy nhiên, có các ngoại lệ: sau dấu gạch nối, dấu nháy đơn và các dấu câu khác trong một từ, chữ hoa không được chèn vào. Ví dụ, “O’Brien” sẽ vẫn đúng.
Một đặc điểm quan trọng là tự động viết hoa chỉ hoạt động trên ký tự đầu tiên của một từ. Nếu người dùng nhập một từ có chứa chữ hoa ở giữa (ví dụ: iPhone hoặc macOS), hệ thống không thay đổi chúng, vì chuyển đổi chỉ áp dụng cho ký tự đầu tiên sau kích hoạt. Điều này có nghĩa là tên thương hiệu và sản phẩm có chữ hoa/chữ thường không chuẩn sẽ không bị ảnh hưởng.
Tự động viết hoa nên được tắt trong các trường mà chữ hoa/chữ thường quan trọng cho việc xử lý dữ liệu chính xác. Các trường hợp phổ biến: trường địa chỉ email, biệt danh và tên người dùng, mật khẩu, truy vấn tìm kiếm, URL, mã xác nhận, IMEI và số sê-ri. Trong tất cả các trường hợp này, việc thay đổi chữ hoa/chữ thường tự động sẽ gây ra lỗi khi xử lý ở phía máy chủ.
Đối với trường tìm kiếm (UISearchBar), tự động viết hoa được tắt theo mặc định, phù hợp với mong đợi của người dùng. Một truy vấn tìm kiếm có thể được nhập ở bất kỳ dạng chữ nào và máy chủ thường tự động chuyển đổi nó thành chữ thường. Nếu bật tự động viết hoa cho tìm kiếm, người dùng sẽ phải thủ công sửa chữ hoa ở đầu mỗi truy vấn.
Trong biểu mẫu đăng ký, trường tên người dùng hoặc biệt danh nên ở chế độ .none, vì nhiều hệ thống phân biệt chữ hoa/chữ thường trong tên người dùng. Trường email cũng nên không có tự động viết hoa — mặc dù tên miền không phân biệt chữ hoa/chữ thường, phần cục bộ của email về mặt lý thuyết có thể phân biệt chữ hoa/chữ thường, mặc dù trong thực tế điều này hiếm gặp.
Theo Tài liệu dành cho Nhà phát triển Apple, các trường có secureTextEntry (mật khẩu) tự động kế thừa autocapitalizationType = .none, ngay cả khi nhà phát triển đã đặt rõ ràng một giá trị khác. Hệ thống có quyền ưu tiên cao nhất cho đầu vào an toàn và bỏ qua mọi nỗ lực bật tự động viết hoa cho trường mật khẩu.
Cấu hình tự động viết hoa trong Swift được thực hiện thông qua thuộc tính autocapitalizationType. Thuộc tính có sẵn cho UITextField, UITextView và UISearchBar. Giá trị có thể được đặt cả trong mã và thông qua Interface Builder trong trình kiểm tra thuộc tính, nơi chế độ được gọi là Capitalization.
let nameField = UITextField()
nameField.autocapitalizationType = .words
let emailField = UITextField()
emailField.autocapitalizationType = .none
Đối với biểu mẫu liên hệ, hãy cấu hình mỗi trường theo ngữ nghĩa của nó: tên — .words, email — .none, tin nhắn — .sentences. Sự kết hợp này mang lại trải nghiệm người dùng tốt nhất và giảm thiểu nhu cầu sửa chữ hoa/chữ thường thủ công.
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
}
}
Để thay đổi chế độ theo chương trình trong thời gian chạy, hãy sử dụng đại biểu UITextFieldDelegate. Ví dụ: nếu một trường có thể được sử dụng trong các ngữ cảnh khác nhau, hãy thay đổi autocapitalizationType trong phương thức textFieldDidBeginEditing tùy theo chế độ hoạt động hiện tại của biểu mẫu.
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField === codeField {
textField.autocapitalizationType = .allCharacters
}
}
Tự động viết hoa phụ thuộc vào ngôn ngữ đầu vào được đặt trên bàn phím của người dùng. Các ngôn ngữ khác nhau có thể có các quy tắc chuyển đổi chữ hoa/chữ thường khác nhau. Ví dụ, trong tiếng Thổ Nhĩ Kỳ, chữ cái “i” ở dạng chữ hoa trở thành “İ” (có dấu chấm), trong khi “I” ở dạng chữ thường trở thành “ı” (không có dấu chấm). iOS xử lý những đặc điểm này một cách tự động.
Đối với tiếng Nga, tự động viết hoa tuân theo các quy tắc giống như tiếng Anh: chữ hoa sau dấu chấm, ở đầu câu và sau dòng mới. Có thể phát sinh vấn đề với chữ cái “yo” — mặc dù nó có trong từ điển hệ thống, không phải tất cả bố cục bàn phím đều hiển thị nó trên lớp chính và tự động viết hoa chuyển đổi “yo” thành “Yo” một cách chính xác.
Đối với tiếng Trung, tiếng Nhật và tiếng Hàn, tự động viết hoa không được áp dụng vì các ngôn ngữ này không có khái niệm về chữ hoa/chữ thường. Chế độ autocapitalizationType bị hệ thống bỏ qua khi sử dụng bàn phím tương ứng và trường hoạt động giống như ở chế độ .none, bất kể giá trị đã đặt.
Đối với tiếng Ả Rập và tiếng Do Thái, tự động viết hoa cũng không được áp dụng vì các ngôn ngữ này sử dụng hệ thống chữ viết riêng mà không phân biệt chữ hoa và chữ thường. Hệ thống iOS phát hiện chính xác ngôn ngữ đầu vào và bỏ qua cài đặt tự động viết hoa cho các ngôn ngữ không có khái niệm này.
Câu hỏi thường gặp
Có, thuộc tính autocapitalizationType có thể được thay đổi bất kỳ lúc nào, ngay cả khi trường đã hoạt động. Thay đổi sẽ có hiệu lực ở lần nhập ký tự tiếp theo.
Có, đối với các trường có isSecureTextEntry = true, hệ thống tự động đặt autocapitalizationType = .none. Hành vi này không thể thay đổi bằng chương trình.
Có, UITextView hỗ trợ đầy đủ autocapitalizationType. Điều này đặc biệt hữu ích cho các trường nhiều dòng nơi chế độ .sentences hoạt động tự nhiên nhất.
Nếu một trường không được đánh dấu là secureTextEntry nhưng được sử dụng để nhập mật khẩu, tự động viết hoa có thể thay đổi mật khẩu. Luôn tắt nó cho các trường mà chữ hoa/chữ thường quan trọng.
Trên trình mô phỏng, tự động viết hoa hoạt động thông qua bàn phím phần cứng của Mac và có thể hoạt động khác. Hãy kiểm tra trên thiết bị thật để có hành vi chính xác.
Tóm tắt
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm