الكتابة التلقائية بالأحرف الكبيرة هي آلية في iOS تقوم تلقائياً بتحويل الحرف الأول من النص المدخل إلى حرف كبير في سياقات معينة. يوفر UIKit الخاصية autocapitalizationType في بروتوكول UITextInputTraits بأربعة أوضاع: none, words, sentences و allCharacters. وفقاً لدليل Apple Text Programming Guide (2025)، فإن التكوين الصحيح للكتابة التلقائية بالأحرف الكبيرة يحسن تجربة المستخدم ويقلل عدد التصحيحات اليدوية أثناء الإدخال. استخدم وضع sentences لمعظم حقول النص ووضع none لأسماء المستخدمين وكلمات المرور.
النقاط الرئيسية
الكتابة التلقائية بالأحرف الكبيرة هي ميزة في نظام iOS تقوم تلقائياً بتحويل أول حرف من النص إلى حرف كبير عند استيفاء شروط معينة. يتم التحكم في الآلية من خلال خاصية autocapitalizationType، المتاحة لجميع العناصر التي تنفذ بروتوكول UITextInputTraits: UITextField و UITextView و UISearchBar.
تعمل الميزة على مستوى محرك النصوص في iOS وتنشط عند إدخال كل حرف. يقوم النظام بتحليل موضع المؤشر والنص المحيط لتحديد ما إذا كان يجب تحويل الحرف المدخل حالياً إلى كبير. إذا تحقق الشرط، يقوم iOS تلقائياً باستبدال الحرف الصغير بحرف كبير قبل ظهوره في الحقل.
وفقاً لـ إرشادات واجهة المستخدم من Apple (2025)، فإن الكتابة التلقائية بالأحرف الكبيرة هي جزء من نظام إدخال تنبؤي أوسع يشمل أيضاً التصحيح التلقائي والإدخال التنبؤي للنص. يمكن للمستخدم تعطيل كل هذه الميزات عالمياً في إعدادات النظام (الإعدادات > عام > لوحة المفاتيح)، ولكن المطور يتحكم بها أيضاً على مستوى الحقول المحددة.
على عكس التصحيح التلقائي، لا تستخدم الكتابة التلقائية بالأحرف الكبيرة نموذج لغة — فهي تعمل بقواعد بسيطة: بعد النقطة والمسافة، في بداية النص، بعد حرف السطر الجديد. الاستثناء هو وضع words، حيث يصبح الحرف الأول من كل كلمة كبيراً بغض النظر عن السياق.
UITextAutocapitalizationType هو تعداد من أربع قيم تحدد استراتيجية التحويل التلقائي لحالة الأحرف. كل وضع مصمم لنوع معين من حقول النص ويحل مهمة محددة لتجربة المستخدم.
يقوم الوضع .none بتعطيل التحويل التلقائي لحالة الأحرف تماماً. يتم إدخال جميع الأحرف بالطريقة التي يكتبها بها المستخدم. هذا الوضع إلزامي لحقول كلمات المرور وعناوين البريد الإلكتروني والأسماء المستعارة واستعلامات البحث وأي حقول تكون فيها حالة الأحرف مهمة لمعالجة البيانات على الخادم.
يقوم الوضع .words بجعل الحرف الأول من كل كلمة مدخلة كبيراً. يحدد النظام حدود الكلمات بواسطة المسافات ويحول الحرف الأول بعد المسافة إلى كبير. هذا الوضع مفيد لحقول الاسم واللقب وأسماء المدن والشوارع والحقول الأخرى حيث يجب أن تبدأ كل كلمة بحرف كبير.
الوضع .sentences هو الأكثر شيوعاً ويستخدم افتراضياً لمعظم حقول النص. يقوم النظام بجعل الحرف الأول بعد النقطة وعلامة التعجب وعلامة الاستفهام متبوعة بمسافة كبيراً. هذا الوضع مثالي للملاحظات والرسائل والتعليقات وحقول النص متعددة الأسطر الأخرى.
يقوم الوضع .allCharacters بتحويل جميع الأحرف المدخلة إلى أحرف كبيرة. هذا الوضع يعادل الضغط المستمر على Caps Lock ويستخدم للحقول التي يجب أن تكون البيانات فيها بأحرف كبيرة: الرموز البريدية ورموز البلدان والاختصارات وأرقام الطلبات. يجب استخدامه بحذر لأن النص بالأحرف الكبيرة يصعب قراءته.
| الوضع | الوصف | مثال إدخال | توصية |
|---|---|---|---|
| .none | بدون تغييرات | ahmed@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. سوف نقدم لك النصح ونقترح أفضل حل.