Autocapitalization — مکانیزمی در iOS است که به طور خودکار اولین حرف متن وارد شده را در زمینههای خاص به حرف بزرگ تبدیل میکند. UIKit ویژگی autocapitalizationType را در پروتکل UITextInputTraits با چهار حالت ارائه میدهد: none، words، sentences و allCharacters. طبق Apple Text Programming Guide (2025)، تنظیم صحیح خودبزرگسازی تجربه کاربری را بهبود میبخشد و تعداد تصحیحات دستی هنگام ورود را کاهش میدهد. برای اکثر فیلدهای متنی از حالت sentences و برای نام کاربری و رمز عبور از حالت none استفاده کنید.
نکات اصلی
Autocapitalization (خودبزرگسازی) — تابعی از سیستم عامل iOS است که به طور خودکار اولین کاراکتر متن را با وقوع شرایط خاص به حرف بزرگ تبدیل میکند. این مکانیزم از طریق ویژگی autocapitalizationType که برای تمام عناصر پیادهساز پروتکل UITextInputTraits در دسترس است کنترل میشود: UITextField، UITextView و UISearchBar.
این تابع در سطح موتور متنی iOS کار میکند و در لحظه ورود هر کاراکتر فعال میشود. سیستم موقعیت مکاننما و متن اطراف را تحلیل میکند تا تعیین کند آیا کاراکتر جاری باید به بزرگ تبدیل شود یا خیر. اگر شرط برآورده شود، iOS به طور خودکار حرف کوچک را قبل از نمایش در فیلد با حرف بزرگ جایگزین میکند.
طبق Apple Human Interface Guidelines (2025)، خودبزرگسازی بخشی از سیستم گستردهتر ورود پیشبینیکننده است که همچنین تصحیح خودکار و تایپ پیشبینیکننده را شامل میشود. کاربر میتواند تمام این توابع را به صورت سراسری در تنظیمات سیستم (تنظیمات > عمومی > صفحهکلید) غیرفعال کند، اما توسعهدهنده نیز آنها را در سطح فیلدهای خاص کنترل میکند.
بر خلاف تصحیح خودکار، خودبزرگسازی از مدل زبانی استفاده نمیکند — طبق قوانین ساده کار میکند: بعد از نقطه و فاصله، ابتدای متن، بعد از نویسه خط جدید. استثنا حالت words است که در آن حرف اول هر کلمه بدون توجه به زمینه بزرگ میشود.
UITextAutocapitalizationType — شمارشی از چهار مقدار است که استراتژی تبدیل خودکار حروف بزرگ و کوچک را تعیین میکند. هر حالت برای نوع خاصی از فیلدهای متنی در نظر گرفته شده است و وظیفه خاصی از تجربه کاربری را حل میکند.
حالت .none تبدیل خودکار حروف را به طور کامل غیرفعال میکند. تمام کاراکترها در همان بزرگی و کوچکی که کاربر تایپ میکند وارد میشوند. این حالت برای فیلدهای رمز عبور، آدرس ایمیل، نام کاربری، جستجو و هر فیلدی که اندازه حروف برای پردازش داده در سرور اهمیت دارد اجباری است.
حالت .words حرف اول هر کلمه وارد شده را بزرگ میکند. سیستم مرز کلمه را با فاصله تعیین میکند و اولین کاراکتر بعد از فاصله را به بزرگ تبدیل میکند. این حالت برای فیلدهای نام، نام خانوادگی، نام شهرها، خیابانها و سایر فیلدهایی که هر کلمه باید با حرف بزرگ شروع شود مناسب است.
حالت .sentences — رایجترین است و به طور پیشفرض برای اکثر فیلدهای متنی استفاده میشود. سیستم حرف اول را بعد از نقطه، علامت تعجب یا علامت سؤال که به دنبال آن فاصله میآید بزرگ میکند. این حالت برای فیلدهای یادداشت، پیام، نظر و سایر متون چندخطی ایدهآل است.
حالت .allCharacters تمام کاراکترهای وارد شده را به حروف بزرگ تبدیل میکند. این حالت معادل فشردن مداوم Caps Lock است و برای فیلدهایی استفاده میشود که دادهها باید با حروف بزرگ باشند: کدهای پستی، کد کشورها، اختصارات، شماره سفارشات. باید با احتیاط استفاده شود زیرا متن با حروف بزرگ خواندنش دشوارتر است.
| حالت | شرح | مثال ورود | توصیه |
|---|---|---|---|
| .none | بدون تغییر | john@mail.com | ایمیل، رمز، جستجو |
| .words | هر کلمه | علی محمدی | نام، آدرس، شهر |
| .sentences | ابتدای جمله | سلام. حال شما؟ | پیامها، یادداشتها |
| .allCharacters | همه بزرگ | ABC-123 | کدها، ایندکسها |
مکانیزم خودبزرگسازی در مرحله پردازش فشار کلید، قبل از نمایش نویسه روی صفحه فعال میشود. هنگامی که کاربر کلیدی را فشار میدهد، UITextInputTraits موقعیت فعلی مکاننما را بررسی میکند و قانون تبدیل حروف را مطابق با autocapitalizationType تنظیم شده اعمال میکند.
برای حالت .sentences سیستم نویسههای ماشهای را دنبال میکند: نقطه (.)، علامت تعجب (!)، علامت سؤال (؟)، و همچنین نویسه خط جدید ( ) در صورت فعال بودن حالت. پس از تشخیص نویسه ماشهای و فاصله بعد از آن، سیستم پرچم “منتظر حرف بزرگ” را برای نویسه بعدی تنظیم میکند.
حالت .words نویسه فاصله را به عنوان ماشه دنبال میکند. بعد از هر فاصله سیستم برای کلمه بعدی حرف بزرگ را انتظار دارد. با این حال استثناهایی وجود دارد: بعد از خط تیره، آپاستروف و سایر علائم نگارشی داخل کلمه حرف بزرگ قرار نمیگیرد. به عنوان مثال، “O’Brien” صحیح باقی میماند.
ویژگی مهم — خودبزرگسازی فقط برای اولین نویسه کلمه کار میکند. اگر کاربر کلمهای حاوی حروف بزرگ در وسط وارد کند (مثلاً iPhone یا macOS)، سیستم آنها را تغییر نمیدهد زیرا تبدیل فقط برای اولین نویسه بعد از ماشه اعمال میشود. این بدان معناست که نام برندها و محصولات با حروف غیراستاندارد آسیب نمیبینند.
خودبزرگسازی باید غیرفعال شود در فیلدهایی که اندازه حروف برای پردازش صحیح داده مهم است. موارد اصلی: فیلدهای آدرس ایمیل، نام کاربری، رمز عبور، جستجو، آدرس URL، کد تأیید، IMEI و شماره سریال. در تمام این موارد تغییر خودکار حروف بزرگ منجر به خطا در پردازش سرور میشود.
برای نوار جستجو (UISearchBar) خودبزرگسازی به طور پیشفرض غیرفعال است که مطابق انتظارات کاربران است. عبارت جستجو میتواند با هر اندازه حرفی وارد شود و سرور معمولاً آن را به طور خودکار به حروف کوچک تبدیل میکند. اگر خودبزرگسازی را برای جستجو فعال کنید، کاربر هر بار مجبور میشود حرف بزرگ ابتدای عبارت را به صورت دستی اصلاح کند.
در فرمهای ثبتنام فیلد username یا nickname باید حالت .none داشته باشد زیرا بسیاری از سیستمها در نام کاربری بین حروف بزرگ و کوچک تفاوت قائل میشوند. فیلد ایمیل نیز باید بدون خودبزرگسازی باشد — اگرچه نام دامنه به حروف بزرگ حساس نیست، بخش محلی ایمیل از نظر تئوری میتواند حروف بزرگ و کوچک را تشخیص دهد، هرچند در عمل به ندرت اتفاق میافتد.
طبق Apple Developer Documentation، فیلدهای 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 این ویژگیها را به طور خودکار در نظر میگیرد.
برای زبان روسی خودبزرگسازی طبق قوانین مشابه انگلیسی کار میکند: حرف بزرگ بعد از نقطه، ابتدای جمله و بعد از خط جدید. ممکن است با حرف “jo” مشکلاتی ایجاد شود — اگرچه در فرهنگ لغت سیستم وجود دارد، همه چیدمانهای صفحهکلید آن را در لایه اصلی نمایش نمیدهند و خودبزرگسازی آن را به درستی به بزرگ تبدیل میکند.
برای زبانهای چینی، ژاپنی و کرهای خودبزرگسازی اعمال نمیشود زیرا در این زبانها مفهومی از حروف بزرگ و کوچک وجود ندارد. حالت autocapitalizationType هنگام استفاده از صفحهکلیدهای مربوطه توسط سیستم نادیده گرفته میشود و فیلد صرف نظر از مقدار تنظیم شده مانند حالت .none رفتار میکند.
برای زبان عربی و عبری نیز خودبزرگسازی اعمال نمیشود زیرا این زبانها از سیستم نوشتاری خود بدون تقسیم به حروف کوچک و بزرگ استفاده میکنند. سیستم iOS زبان ورودی را به درستی تشخیص میدهد و تنظیمات خودبزرگسازی را برای زبانهایی که این مفهوم در آنها وجود ندارد نادیده میگیرد.
سوالات متداول
بله، ویژگی autocapitalizationType را میتوان در هر لحظه، حتی زمانی که فیلد فعال است، تغییر داد. تغییر با ورود نویسه بعدی اعمال میشود.
بله، برای فیلدهای با isSecureTextEntry = true سیستم به طور خودکار autocapitalizationType = .none را تنظیم میکند. تغییر این رفتار به صورت برنامهای ممکن نیست.
بله، UITextView به طور کامل از autocapitalizationType پشتیبانی میکند. این به ویژه برای فیلدهای چندخطی که حالت .sentences به طور طبیعی کار میکند مفید است.
اگر فیلد به عنوان secureTextEntry مشخص نشده باشد اما برای ورود رمز عبور استفاده شود، خودبزرگسازی میتواند رمز عبور را تغییر دهد. همیشه آن را در فیلدهایی که اندازه حروف مهم است غیرفعال کنید.
در شبیهساز خودبزرگسازی از طریق صفحهکلید فیزیکی Mac کار میکند و ممکن است متفاوت رفتار کند. برای رفتار صحیح روی دستگاه واقعی تست کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید