Input-mask-ios: مشاكل المساحة الفارغة

تم إنشاؤها على ٢٤ مايو ٢٠١٨  ·  6تعليقات  ·  مصدر: RedMadRobot/input-mask-ios

أواجه مشكلتين تتعلقان بالمساحة الفارغة.

  1. لدي هذا القناع لبطاقة الائتمان: "[0000] [0000] [0000] [0000] [999]" لكن المشكلة الرئيسية هي عندما ينتهي المستخدم من كتابة الأرقام الإلزامية ، لا تزال تقول لم تكتمل لأن المستخدم لم يكتب المساحة الفارغة قبل [999] . كيف يمكنني حل هذه المشكلة؟

  2. لدي هذا القناع لإدخال الاسم: [A…] لكنه لا يسمح لي بإدخال مساحة فارغة ، ويبدو أنه لا يوجد رمز لذلك. حتى أنني حاولت إنشاء تدويني المخصص للمساحة الفارغة ولكن دون نجاح. كيف يمكنني السماح بحرف واحد على الأقل ومسافات فارغة اختيارية؟

شكرا لهذه المكتبة الرائعة!

feature request question

ال 6 كومينتر

ياcaioremedio!
شكرا على أسئلتك. أنا بالفعل أرى طلب ميزة محتمل.

أولاً ، قد تكون الملاحظات المخصصة لقناع بطاقة الائتمان الخاصة بك "[0000] [0000] [0000] [0000] [999]" هي إجابتك. أنت بحاجة إلى حرف مسافة اختياري ، مثل هذا:

"[0000] [0000] [0000] [0000][s][999]"

Notation(character: "s", characterSet: CharacterSet(charactersIn: " "), isOptional: true)

—يرجى تجربته وإعلامي بنتائجك.

ثانيًا ، لاحظت وجود خطأ منطقي في Compiler . في الوقت الحالي ، تحاول مكتبتنا أن ترث خصائص […] اعتمادًا على الحرف السابق ، وهي لا تدعم الرموز المخصصة لهذا الحرف السابق (انظر الرابط).

سأحتاج إلى تحديث المكتبة لاحتياجاتك ، حسنًا؟

مرحبًا taflanidi ، شكرًا على الرد السريع.

أولاً: حاولت باستخدام [s] ولكن لا يتم إدخال حرف مسافة فارغ تلقائيًا. أنا في عداد المفقودين شيء هنا؟

أنا أستخدم فئة فرعية من MaskedTextFieldDelegate ، لقد أنشأت بعض الوحدات المخصصة لـ customNotations :

class NotifyingMaskedTextFieldDelegate: MaskedTextFieldDelegate {

    weak var editingListener: NotifyingMaskedTextFieldDelegateListener?

    override init(format: String) {
        super.init(format: format)
    }

    convenience init(format: String, customNotations: [Notation]) {
        self.init(format: format)
        self.customNotations = customNotations
    }

    convenience init(format: String, customNotation: Notation) {
        self.init(format: format, customNotations: [customNotation])
    }
}

جار تهيئة:

NotifyingMaskedTextFieldDelegate(
    format: "[0000] [0000] [0000] [0000][s][999]",
    customNotation: Notation(character: "s",
                             characterSet: CharacterSet(charactersIn: " "),
                             isOptional: true))

ثانيًا: حسنًا ، لكن من الممكن تضمين مساحة فارغة فقط في المترجم (جنبًا إلى جنب مع الأرقام والحروف)؟

شكرا على الدعم.

مرحبًا caioremedio ،

حاولت مع [s] ولكن لا يتم إدخال مسافة فارغة تلقائيًا. أنا في عداد المفقودين شيء هنا؟

أوه ، لقد نسيت ذلك. لقد ذكرت ذلك حتى في نهاية قسم الملف التمهيدي الخاص بالتدوينات المخصصة .

أنا أستخدم فئة فرعية من MaskedTextFieldDelegate ، لقد أنشأت بعض المدخلات المخصصة لـ customNotations

لا تحتاج إلى فئة فرعية ، في الواقع. MaskedTextFieldDelegate لديها متغير العام الموافق customNotations ، وكنت للتو تعيين قائمة من الرموز لذلك.

أيضًا ، أرى الآن مع هذا النهج ستحصل على مشكلة أخرى في القيمة المستخرجة. لكي تكون محددًا ، هذه المشكلة: 1234123412341234 999 - مساحة غير ضرورية.

ولكن هناك طريقة أخرى يمكنك دمجها لتحديد القيمة كاملة. Mask مثيلات MaskedTextFieldDelegate سلسلة من المقاييس المحسوبة للنص وللقيمة المستخرجة ، مثل acceptableTextLength ، totalTextLength ، إلخ.

سيعيد MaskedTextFieldDelegate.acceptableValueLength () 16 في حالتك ، لذا يمكنك مقارنة طول القيمة المستخرجة به من أجل تحديد اكتمال الكتابة.


  1. > حسنًا ، لكن من الممكن تضمين مساحة فارغة فقط في المترجم (جنبًا إلى جنب مع الأرقام والحروف)؟

لتعريف السلوك ، يحتاج Compiler إلى معرفة طبيعة الحرف السابق للحذف:

[A…]
 ^ this one defines, what symbols are accepted

في الوقت الحالي ، Compiler يقتصر على المجموعة الأساسية A a 0 9 - _ . لا تعمل الرموز المخصصة عندما يتعلق الأمر بالأقنعة البيضاوية ، فهذه ميزة يجب تنفيذها.

أوه ، لقد نسيت ذلك. لقد ذكرت ذلك حتى في نهاية قسم الملف التمهيدي الخاص بالتدوينات المخصصة.

يا سيئ ، لم ألاحظ ذلك.

لا تحتاج إلى فئة فرعية ، في الواقع. يحتوي MaskedTextFieldDelegate على المتغير العام customNotations المقابل ، وتقوم فقط بتعيين قائمة الرموز الخاصة بك إليه.

لا ، أنا لا أقوم بتصنيف فرعي للتدوين المخصص فقط ، فأنا أستخدمه للنُهج الأخرى (تجاوز طرق UITextField ). لقد علقت فقط على ذلك لأنني اعتقدت أن الإكمال التلقائي لا يعمل كان خطأ ، لذلك كتبت كل ما كنت أفعله.

سيعيد MaskedTextFieldDelegate.acceptableValueLength () 16 في حالتك ، لذا يمكنك مقارنة طول القيمة المستخرجة به من أجل تحديد اكتمال الكتابة.

رائع ، عملت مثل السحر. لذا بدلاً من التحقق مما إذا كان completed == true ، يجب أن أعتمد الآن على value.count > MaskedTextFieldDelegate.acceptableValueLength() أليس كذلك؟ لقد اختبرت هنا ويبدو أنني أعمل على جميع الحالات.

لا تعمل الرموز المخصصة عندما يتعلق الأمر بالأقنعة البيضاوية ، فهذه ميزة يجب تنفيذها.

مسكتك. في غضون ذلك ، سأستخدم الافتراضي UITextFieldDelegate لذلك.

من أجل تحديد السلوك ، يحتاج المترجم إلى معرفة طبيعة الحرف السابق للحذف:

ما أعنيه هو ، بدلاً من تطبيق الرموز المخصصة (إذا كان يتطلب الكثير من العمل) باستخدام علامات الحذف ، ما عليك سوى تنفيذ حرف مسافة فارغة.

شكرا لك مرة أخرى!

caioremedio ،

رائع ، عملت مثل السحر. لذا بدلاً من التحقق مما إذا كان قد اكتمل == صحيح ، الآن يجب أن أعتمد على value.count> MaskedTextFieldDelegate.acceptableValueLength () ، أليس كذلك؟

نعم.

ما أعنيه هو ، بدلاً من تطبيق الرموز المخصصة (إذا كان يتطلب الكثير من العمل) باستخدام علامات الحذف ، ما عليك سوى تنفيذ حرف مسافة فارغة.

في الواقع ، يتطلب استخدام الرموز المخصصة هنا عملاً أقل من جانبنا.

مسكتك. في غضون ذلك ، سنستخدم المفوض الافتراضي UITextFieldDelegate لذلك.

ترقبوا تحديثات Compiler نهاية هذا الأسبوع.

caioremedio ،

حسنًا ، تدعم الأقنعة البيضاوية الآن الرموز المخصصة أيضًا.

تحقق من أحدث 3.4.1 .

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

KompoD picture KompoD  ·  5تعليقات

MrJox picture MrJox  ·  11تعليقات

TikhonovAlexander picture TikhonovAlexander  ·  3تعليقات

razalur picture razalur  ·  3تعليقات

DamascenoRafael picture DamascenoRafael  ·  4تعليقات