إدخال المستخدم هو أساس تفاعل المستخدم مع التطبيق المحمول. تعتمد سهولة استخدام المنتج على التنفيذ الصحيح لـ UITextField على iOS وEditText على Android ولوحات المفاتيح في التطبيقات المحمولة. وفقًا لـ HIG Apple، فإن المعالجة غير الصحيحة لإدخال المستخدم هي سبب شائع للمراجعات السلبية.
النقاط الرئيسية
إدخال المستخدم في التطبيقات المحمولة هو عملية نقل البيانات من المستخدم إلى التطبيق عبر الشاشة التي تعمل باللمس ولوحة المفاتيح الافتراضية. على iOS، الأداة الرئيسية هي UITextField؛ على Android، هي EditText. يغطي إدخال المستخدم حقول النص ونماذج التسجيل واستعلامات البحث وأرقام الهواتف ورموز التأكيد. تؤثر جودة تنفيذ إدخال المستخدم على سرعة ملء النماذج ومعدل التحويل للتطبيق المحمول.
المعالجة غير الصحيحة لـ إدخال المستخدم في التطوير المحمول تؤدي إلى أخطاء في التحقق ونقاط ضعف وفقدان المستخدمين. وفقًا لـ Statista (2025)، يقوم 67% من المستخدمين بحذف التطبيق المحمول بعد محاولتي إدخال فاشلتين. يتضمن التنفيذ الصحيح لإدخال المستخدم تكوين نوع لوحة المفاتيح والتحقق والتنسيق والملء التلقائي. في التطوير المحمول، هذه الجوانب موحدة من قبل كلا النظامين.
لوحة المفاتيح في التطبيقات المحمولة يتم تكوينها عبر keyboardType على iOS وinputType على Android. تشمل إعدادات المستخدم التصحيح التلقائي والملء التلقائي وإدخال كلمة المرور الآمن. تتحكم Responder Chain على iOS والتركيز على Android في إظهار وإخفاء لوحة المفاتيح. بالنسبة لإدخال المستخدم في التطبيقات المحمولة، فإن Keyboard Avoidance أمر بالغ الأهمية — يجب ألا يتم حظر المحتوى بواسطة لوحة المفاتيح.
على iOS، العناصر الرئيسية لإدخال المستخدم هي UITextField للنص أحادي السطر وUITextView للنص متعدد الأسطر. كلاهما يدعم المندوبين UITextFieldDelegate وUITextViewDelegate لإدارة بدء التحرير وتغييره وانتهائه. يتم تكوين لوحة المفاتيح في تطبيقات iOS المحمولة من خلال الخصائص keyboardType وreturnKeyType وisSecureTextEntry.
الخاصية textContentType توحي للنظام بالبيانات المتوقعة في الحقل — username، password، oneTimeCode، emailAddress. هذا يفعل الملء التلقائي من سلسلة المفاتيح ويسرع إدخال المستخدم. للحقول ذات Secure Text Entry، حدد .password لكي يقوم مدير كلمات المرور بحفظ بيانات الاعتماد بشكل صحيح. استخدام textContentType يحسن إدخال المستخدم في التطبيقات المحمولة.
let textField = UITextField()
textField.placeholder = "Email"
textField.keyboardType = .emailAddress
textField.textContentType = .emailAddress
textField.autocorrectionType = .no
textField.becomeFirstResponder()
First Responder هو الحقل النشط الذي يستقبل أحداث لوحة المفاتيح. استدعاء becomeFirstResponder() يظهر لوحة المفاتيح، resignFirstResponder() يخفيها. تتحقق Responder Chain بالتسلسل مما إذا كان العنصر يمكنه معالجة الحدث. عند وجود حقول متعددة، من المهم إدارة First Responder حتى لا تبقى لوحة المفاتيح مفتوحة. يتم إدارة إدخال المستخدم في التطبيقات المحمولة أيضًا عبر textFieldShouldReturn — الضغط على Return ينتقل إلى الحقل التالي.
على Android، النظير لـ UITextField هو EditText، الذي يدعم وضع أحادي ومتعدد الأسطر عبر السمة inputType. للحقول Material، استخدم TextInputLayout من مكتبة com.google.android.material — يضيف تلميحًا عائمًا وعداد أحرف ودعمًا للأخطاء. يتم تكوين إدخال المستخدم في تطبيقات Android المحمولة عبر inputType وimeOptions.
السمة inputType تحدد نوع لوحة المفاتيح ووضع الإدخال: text للنص العادي، textPassword لكلمات المرور، number للأرقام، phone للوحة المفاتيح الهاتفية. تتحكم imeOptions في الإجراء على زر Enter — Done، Next، Search، Send. ادمج القيم باستخدام OR على مستوى البت: text|textCapSentences. لوحات المفاتيح في تطبيقات Android المحمولة تدعم الملء التلقائي عبر autofillHints.
val editText = EditText(this)
editText.inputType = InputType.TYPE_CLASS_PHONE
editText.imeOptions = EditorInfo.IME_ACTION_DONE
editText.autofillHints = "phone"
val layout = TextInputLayout(this)
layout.hint = "Номер телефона"
layout.addView(editText)
TextInputLayout.setError() يعرض رسالة خطأ أسفل حقل الإدخال. ادمج التحقق الفوري عبر TextWatcher والتحقق النهائي عند إرسال النموذج. إدخال المستخدم في التطبيقات المحمولة يتضمن أيضًا التركيز — requestFocus() يجعل الحقل نشطًا ويظهر لوحة المفاتيح. استخدم clearFocus() لإخفاء لوحة المفاتيح عند اكتمال إدخال المستخدم على Android.
لوحة المفاتيح في التطبيقات المحمولة يجب ألا تغطي حقول الإدخال — هذا مطلب أساسي لتجربة المستخدم. Keyboard Avoidance هي تقنية إزاحة المحتوى عند ظهور لوحة المفاتيح. على iOS، استخدم UIResponder.keyboardWillShowNotification للحصول على حجم لوحة المفاتيح وإزاحة scrollView. على Android، حدد adjustResize في البيان أو استخدم CoordinatorLayout. يتم تكوين لوحات المفاتيح في التطبيقات المحمولة بشكل مختلف على النظامين، لكن الهدف واحد — المحتوى مرئي دائمًا.
على iOS، اشترك في إشعارات keyboardWillShowNotification وkeyboardWillHideNotification عبر NotificationCenter. في المعالج، احصل على حجم لوحة المفاتيح من userInfo واضبط contentInset في UIScrollView. بدلاً من ذلك، استخدم IQKeyboardManager الذي يتعامل تلقائيًا مع الإزاحة. إدخال المستخدم في التطوير المحمول iOS يتطلب معالجة إلزامية للوحة المفاتيح لتجربة مستخدم مريحة.
على Android، الطريقة الرئيسية هي android:windowSoftInputMode="adjustResize" في البيان. هذه العلامة تضغط التخطيط عند ظهور لوحة المفاتيح. بالنسبة لـ CoordinatorLayout، استخدم Behavior الذي يرفع الأزرار والحقول. استخدم ViewCompat.setOnApplyWindowInsetsListener للتحكم الدقيق في الهوامش. يتم إدارة لوحة المفاتيح في تطبيق Android المحمول أيضًا عبر OnGlobalLayoutListener.
التحقق من صحة إدخال المستخدم هو خطوة إلزامية في معالجة البيانات في التطبيقات المحمولة. بدونه، يستقبل التطبيق بيانات غير صحيحة، مما يؤدي إلى أخطاء ونقاط ضعف. يتطلب إدخال المستخدم في التطبيقات المحمولة نهجين: التحقق الفوري (عند كل حرف) للأرقام والرموز، والتحقق النهائي للبريد الإلكتروني وكلمات المرور. يقوم Input Mask بتنسيق رقم الهاتف والتاريخ ورقم البطاقة تلقائيًا.
Input Mask يحدد نمط إدخال يتم بموجبه تنسيق النص تلقائيًا. مثال لقناع لرقم هاتف روسي: "+7 (___) ___-__-__". على iOS، يتم تنفيذ Input Mask عبر المندوب textField(_:shouldChangeCharactersIn:replacementString:). على Android، استخدم InputFilter مع تتبع موضع الأحرف. للأرقام الدولية، استخدم مكتبة libphonenumber من Google.
func textField(
_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String
) -> Bool {
guard let text = textField.text else { return true }
let masked = applyPhoneMask(text, mask: "+7 (***) ***-**-**")
textField.text = masked
return false
}
| المعامل | iOS | Android |
|---|---|---|
| حقل أحادي السطر | UITextField | EditText |
| حقل متعدد الأسطر | UITextView | EditText + textMultiLine |
| تلميح عائم | attributedPlaceholder | TextInputLayout |
| نوع لوحة المفاتيح | keyboardType | inputType |
| إدخال آمن | isSecureTextEntry | textPassword |
| الملء التلقائي | textContentType | autofillHints |
| مندوب أو مستمع | UITextFieldDelegate | TextWatcher |
| خطأ التحقق | UILabel مخصص | TextInputLayout.setError() |
الأسئلة الشائعة
قم باستدعاء becomeFirstResponder() على UITextField أو UITextView. للإخفاء، استخدم resignFirstResponder(). تأكد من أن الحقل مرئي وغير محظور.
inputType يحدد نوع لوحة المفاتيح (نص، أرقام، بريد إلكتروني). imeOptions تتحكم في الإجراء على زر Enter (Done، Next، Search). يعملان بشكل مستقل وغالبًا ما يتم دمجهما.
استخدم المندوب textField(_:shouldChangeCharactersIn:replacementString:) وقم بتنسيق النص يدويًا. أو استخدم مكتبة InputMask مع أنماط مثل "+7 ([000]) [000]-[00]-[00]".
حدد android:windowSoftInputMode="adjustResize" في البيان. إذا كنت تستخدم CoordinatorLayout، تحقق من تكوين Behavior لرفع الأزرار والحقول.
على iOS، استخدم textContentType = .oneTimeCode. على Android، استخدم autofillHints = "smsCode". سيقوم النظام تلقائيًا بتعبئة الرمز من الرسالة النصية عند الاستلام.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.