UITextField — ما هو، إعداد حقل الإدخال ومبدأ العمل

المؤلف: IT Sectr نُشر: 2026-07-06 وقت القراءة: 8 دق

UITextField هو مكون UIKit قياسي لإدخال النص بسطر واحد في iOS، يرث من UIControl ويدعم مجموعة واسعة من أوضاع لوحة المفاتيح. وفقاً لوثائق Apple Developer (2025)، يوفر UITextField المفوض UITextFieldDelegate مع استدعاءات shouldBeginEditing وshouldChangeCharactersInRange وshouldReturn. على عكس UITextView، يحد UITextField الإدخال بسطر واحد ويدعم secureTextEntry وleftView وrightView لعناصر تحكم مخصصة. هذا هو العنصر الرئيسي لنماذج التوثيق والبحث والتسجيل وإدخال البيانات في تطبيقات iOS.

الرئيسية

  • UITextField — حقل إدخال UIKit بسطر واحد مع دعم المفوض ولوحات المفاتيح المخصصة
  • UIKeyboardType — 12 نوعاً من لوحات المفاتيح: numberPad وemailAddress وURL وphonePad وغيرها
  • UITextFieldDelegate — إدارة دورة حياة الإدخال عبر استدعاءات shouldBegin/End/Change
  • Secure Text Entry — وضع إدخال كلمة المرور مع استبدال الأحرف بنقاط عبر isSecureTextEntry
  • Left/Right View — أيقونات وأزرار مخصصة داخل حقل الإدخال لتحسين تجربة المستخدم

ما هو UITextField

UITextField هو فئة من إطار عمل UIKit مصممة لإدخال النص بسطر واحد من قبل المستخدم. ترث الفئة من UIControl، مما يسمح بالاشتراك في أحداث الإدخال عبر آلية target-action: addTarget(self, action: Selector("textChanged:"), for: editingChanged). يعرض UITextField حداً (borderStyle) ونصاً placeholder عندما يكون الحقل فارغاً وزر مسح (clearButtonMode) ويمكن أن يحتوي على طرق عرض مساعدة يسار/يمين. يظهر/يخفي الحقل لوحة المفاتيح تلقائياً عند اكتساب/فقدان التركيز عبر becomeFirstResponder وresignFirstResponder. يتم تحديد حجم الحقل بواسطة intrinsicContentSize بناءً على الخط ونمط الحد. لإنشاء UITextField في Interface Builder (Storyboard/XIB)، استخدم مكتبة الكائنات؛ برمجياً، استخدم المُهيئ UITextField(frame: CGRect). الفئة متوافقة تماماً مع بنية iOS الحديثة: Combine publishers و@Published في SwiftUI عبر UIViewRepresentable وDiffable Data Source للنماذج.

أنواع لوحة المفاتيح UIKeyboardType

UITextField يدعم 12 نوعاً من لوحات المفاتيح عبر الخاصية keyboardType. كل نوع يحسن مجموعة الأحرف لسيناريو إدخال محدد. UIKeyboardType.default — لوحة مفاتيح QWERTY قياسية. UIKeyboardType.numberPad — أرقام فقط بدون رموز إضافية (مثالية لأكواد PIN وأرقام الهواتف). UIKeyboardType.emailAddress — لوحة مفاتيح مع @ ونقطة على الطبقة الرئيسية. UIKeyboardType.URL — لوحة مفاتيح مع .com و / ونقطة على الطبقة الرئيسية. UIKeyboardType.phonePad — لوحة مفاتيح رقمية مع + و * و # لإدخال أرقام الهواتف. UIKeyboardType.decimalPad — أرقام مع نقطة عشرية لإدخال الأسعار. UIKeyboardType.webSearch — لوحة مفاتيح مع زر Go محسنة لاستعلامات البحث. UIKeyboardType.asciiCapable — أحرف ASCII فقط للنص اللاتيني. تظهر لوحة المفاتيح عند استدعاء becomeFirstResponder وتختفي عند استدعاء resignFirstResponder. يمكن تغيير نوع لوحة المفاتيح ديناميكياً أثناء التحرير.

النوعالسيناريوالميزات
defaultإدخال نص عامQWERTY قياسية
numberPadPIN، رمزأرقام 0-9 فقط
emailAddressبريد إلكتروني@ و. على الطبقة الرئيسية
URLعنوان ويب.com، /، . على الرئيسية
phonePadهاتفأرقام، +، *، #
decimalPadسعر، رقمأرقام + نقطة عشرية

المفوض UITextFieldDelegate وطرقه

UITextFieldDelegate هو بروتوكول يحدد سلوك حقل النص في مراحل مختلفة من الإدخال. الطرق الرئيسية: textFieldShouldBeginEditing(textField) — يُرجع Bool يسمح أو يمنع بدء التحرير؛ textFieldDidBeginEditing — يُستدعى بعد ظهور لوحة المفاتيح؛ textFieldShouldEndEditing — يتحقق مما إذا كان يمكن إكمال التحرير (إذا كان false، لا يفقد الحقل التركيز)؛ textFieldDidEndEditing — يُستدعى بعد إخفاء لوحة المفاتيح؛ textFieldShouldChangeCharactersInRange — يُستدعى عند كل إدخال حرف، يسمح بتصفية الإدخال (يُسمح بحرف واحد فقط، إذا تم إرجاع false، لا يُضاف الحرف)؛ textFieldShouldReturn — يُستدعى عند الضغط على Return/Go/Next/Search، يُستخدم للانتقال إلى الحقل التالي. المفوض ليس Optional: جميع الطرق لها تطبيق افتراضي، ولكن للسلوك المخصص تحتاج إلى تجاوز الطريقة المقابلة.

إدارة التركيز عبر shouldReturn

طريقة shouldReturn هي النمط القياسي للتنقل بين حقول النموذج. التطبيق: textFieldShouldReturn(textField) — تحقق من أي textField أثار الحدث وانقل التركيز إلى الحقل التالي عبر becomeFirstResponder(). إذا كان الحقل الأخير، استدع resignFirstResponder() لإخفاء لوحة المفاتيح. استخدم IBOutlet collection أو IBOutlets منفصلة لكل حقل لتخزين مراجع الحقول.

Secure Text Entry وطرق العرض left/right المخصصة

isSecureTextEntry — خاصية UITextField التي، عندما تكون true، تستبدل الأحرف المدخلة بنقاط (•) وتمنع نسخ النص عبر UIMenuController. تُستخدم لحقول كلمة المرور وأكواد PIN وCVV. عند التبديل بين الوضع الآمن والنص العادي (show/hide password)، قم بتعيين textField.isSecureTextEntry.toggle(). مهم: عند تغيير isSecureTextEntry، يتم إعادة تعيين نص الحقل — احفظه مسبقاً. LeftView و RightView هما UIView مخصصان يُعرضان داخل حقل الإدخال على اليسار أو اليمين. الاستخدام النموذجي: أيقونة بحث في leftView، زر "مسح" في rightView. التكوين: textField.leftViewMode = always (دائماً) أو whileEditing (أثناء التحرير فقط). يتم وضع طرق العرض left/right تلقائياً داخل حقل النص مع مراعاة الحشو. يتم تعيين حجم العرض عبر bounds أو Auto Layout.

swift
import UIKit

class LoginViewController: UIViewController {
    let passwordField = UITextField()

    override func viewDidLoad() {
        super.viewDidLoad()
        passwordField.isSecureTextEntry = true
        passwordField.placeholder = "Password"
        passwordField.keyboardType = .asciiCapable
        passwordField.delegate = self

        // زر مخصص لإظهار/إخفاء كلمة المرور
        let showButton = UIButton(type: .system)
        showButton.setTitle("إظهار", for: .normal)
        showButton.addTarget(self, action: #selector(togglePasswordVisibility),
                       for: .touchUpInside)
        passwordField.rightView = showButton
        passwordField.rightViewMode = .always
    }

    @objc func togglePasswordVisibility() {
        passwordField.isSecureTextEntry.toggle()
    }
}

تكوين UITextInputTraits

UITextInputTraits هو بروتوكول يحدد المظهر المرئي والسلوكي للوحة المفاتيح لـ UITextField. الخصائص الرئيسية: autocorrectionType (.default, .no, .yes) — يقوم بتشغيل أو إيقاف التصحيح التلقائي للنص؛ autocapitalizationType (.none, .words, .sentences, .allCharacters) — قفل تلقائي للأحرف الكبيرة للحرف الأول؛ spellCheckingType — التدقيق الإملائي؛ returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — نص زر Return على لوحة المفاتيح؛ enablesReturnKeyAutomatically — قفل تلقائي لزر Return عندما يكون الحقل فارغاً. لحقول إدخال الاسم، استخدم autocapitalizationType = .words؛ للبريد الإلكتروني، استخدم autocorrectionType = .no؛ لعنوان URL، استخدم keyboardType = .URL + autocapitalizationType = .none. يتم تكوين الخصائص بعد تهيئة الحقل قبل عرضه. تغيير الخصائص ديناميكياً يحدث لوحة المفاتيح عند ظهورها التالي.

Return Key Type والتنقل في النموذج

Return Key Type يحدد نص الزر على لوحة المفاتيح: Next — الانتقال إلى الحقل التالي، Done — إكمال الإدخال، Search — بدء البحث، Send — إرسال النموذج، Continue — متابعة التعبئة. بالاقتران مع طريقة المفوض shouldReturn، يسمح returnKeyType بتجربة مستخدم طبيعية: يملأ المستخدم الحقول، ويضغط Next للانتقال إلى التالي، وDone للإرسال في الحقل الأخير. لتخصيص نص الزر، استخدم UIButtonConfiguration في iOS 15+.

Placeholder والتنسيق وقناع الإدخال

Placeholder UITextField هو النص المعروض باللون الرمادي عندما يكون الحقل فارغاً. التكوين: textField.placeholder = "Enter email". لتخصيص لون placeholder وخطه، استخدم attributedPlaceholder مع NSAttributedString. قناع الإدخال يتم تنفيذه عبر طريقة المفوض shouldChangeCharactersInRange — يدعم تنسيق رقم الهاتف والتاريخ وبطاقة الائتمان وSNILS. يسمح قناع الإدخال بفصل العرض عن القيمة: يرى المستخدم نصاً منسقاً (مثل +7 (999) 999-99-99)، بينما يخزن النموذج "79999999999". مثال للتطبيق: خزن القناع كسلسلة بأحرف X للاستبدال؛ عند كل إدخال، شكل السلسلة المنسقة وأرجع false في shouldChangeCharactersInRange، مستبدلاً نص الحقل عبر textField.text = formattedText. للأرقام، استخدم NumberFormatter وkeyboardType العشري.

swift
extension LoginViewController: UITextFieldDelegate {
    func textFieldShouldReturn(
        textField: UITextField
    ) -> Bool {
        if textField == emailField {
            passwordField.becomeFirstResponder()
        } else if textField == passwordField {
            textField.resignFirstResponder()
            loginTapped()
        }
        return true
    }

    func textField(
        textField: UITextField,
        shouldChangeCharactersIn range: NSRange,
        replacementString string: String
    ) -> Bool {
        // منع المسافات في البريد الإلكتروني
        if textField == emailField && string == " " {
            return false
        }
        // حد طول كلمة المرور
        if textField == passwordField {
            let newLength = (textField.text?.count ?? 0) +
                string.count - range.length
            return newLength <= 32
        }
        return true
    }
}

أمثلة كود: التحقق من الصحة والنموذج

لنلق نظرة على مثال كامل لتطبيق نموذج تسجيل دخول بـ UITextField مع التحقق من صحة البريد الإلكتروني وتغذية راجعة بصرية. يحتوي النموذج على حقلين: emailField (لوحة مفاتيح emailAddress، بدون تصحيح تلقائي) وpasswordField (secureTextEntry). يتم التحقق في shouldChangeCharactersInRange وإضافياً عند الضغط على زر Login. للتغذية الراجعة البصرية: حد أحمر (layer.borderColor) عند الخطأ، أخضر — عند التحقق الناجح. إعادة تعيين الحد عند بدء التحرير في textFieldDidBeginEditing.

التحقق من صحة البريد الإلكتروني بتعبير منتظم

التحقق من صحة البريد الإلكتروني يتم عبر NSPredicate بالتنسيق "SELF MATCHES %@" وتعبير منتظم للتحقق الأساسي من التنسيق. يجب إجراء التحقق الفعلي من وجود البريد الإلكتروني على الخادم. للتحقق المتقدم، استخدم مكتبة SwiftValidators أو Combine publishers. مثال: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). يتم تحديث حد الحقل عبر كتلة رسوم متحركة لانتقال سلس.

swift
func validateEmail(textField: UITextField) {
    guard let text = textField.text, !text.isEmpty else {
        textField.layer.borderColor = UIColor.clear.cgColor
        return
    }

    let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.\\p{L}{2,}"
    let predicate = NSPredicate(format: "SELF MATCHES [c] %@", emailRegex)
    let isValid = predicate.evaluate(with: text)

    UIView.animate(withDuration: 0.2) {
        textField.layer.borderColor = isValid
            ? UIColor.systemGreen.cgColor
            : UIColor.systemRed.cgColor
        textField.layer.borderWidth = 1.0
        textField.layer.cornerRadius = 6.0
    }
}

الأسئلة الشائعة

كيفية تحديد عدد الأحرف في UITextField؟

استخدم طريقة المفوض shouldChangeCharactersInRange. احسب الطول الجديد للنص كـ existingText.count + newText.count - range.length وأرجع false إذا تم تجاوز الحد. بديلاً: اشترك في حدث editingChanged عبر addTarget واقطع النص باستخدام textField.text = String(text.prefix(maxLength)).

لماذا لا يستجيب UITextField للمس؟

تحقق من: isUserInteractionEnabled = true (افتراضي)، المفوض لا يُرجع false في shouldBeginEditing. إذا كان الحقل داخل UIScrollView، قم بتعطيل delaysContentTouches. إذا كان الحقل في وحدة تحكم مشروطة، تحقق من أنها لا تمنع اللمسات. لـ SwiftUI UIViewRepresentable، تحقق من أن الحقل يصبح firstResponder بشكل صحيح عبر DispatchQueue.main.async.

كيفية إخفاء لوحة المفاتيح عند النقر خارج UITextField؟

أضف UITapGestureRecognizer على self.view أو scrollView مع target-action يستدعي view.endEditing(true). بديل: textField.resignFirstResponder() لإخفاء لوحة مفاتيح حقل معين. نفذ touchesBegan في UIViewController أو استخدم مكتبة IQKeyboardManager للإدارة التلقائية للوحة المفاتيح. لا تنس تعطيل cancelsTouchesInView للعمل الصحيح للأزرار.

كيفية تغيير لون النص والخط في UITextField؟

لون النص: textField.textColor = UIColor.label. الخط: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). لون placeholder: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).

كيفية جعل UITextField للقراءة فقط؟

ثلاث طرق: isEnabled = false (يغير المظهر)، isUserInteractionEnabled = false (يحافظ على النمط البصري)، أو أرجع false في المفوض textFieldShouldBeginEditing. الطريقة الثالثة مفضلة — فهي تمنع الإدخال دون تغيير النمط البصري. لتعيين نص برمجياً في وضع القراءة فقط، استخدم المفوض.

الخلاصة

  • UITextField — حقل إدخال UIKit بسطر واحد يرث من UIControl مع إدارة المفوض
  • UIKeyboardType — 12 نوعاً من لوحات المفاتيح لسيناريوهات مختلفة: email، URL، numberPad، phonePad
  • UITextFieldDelegate — بروتوكول بطرق shouldBegin/End/Change/Return لإدارة الإدخال
  • Secure Text Entry — وضع كلمة المرور عبر isSecureTextEntry مع استبدال الأحرف بنقاط
  • Left/Right View — عناصر مخصصة داخل الحقل (أيقونات، أزرار) بأوضاع always/whileEditing
  • Return Key Type — تكوين زر Return: Next، Done، Search، Send للتنقل في النموذج
  • التحقق — عبر shouldChangeCharactersInRange مع regex وتغذية راجعة بصرية من خلال الحد
  • يتم تكوين placeholder عبر attributedPlaceholder مع NSAttributedString لنمط مخصص

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا