التحقق من صحة قيم الأقصى/الدقيقة العشرية في nstextfield

StackOverflow https://stackoverflow.com/questions/3605438

  •  25-09-2019
  •  | 
  •  

سؤال

بادئ ذي بدء ، يجب أن أفعل ذلك بدون IB وبدون تقنيات Advanced Objective-C مثل KVO.

تأتي مشكلتي من الحقيقة البسيطة التي لا يمكنني إيجاد طريقة للحصول على قيمة السلسلة الجديدة بالكامل لحقل النص.

لقد حاولت استخدام وظيفة المندوب:

- (BOOL)textView:(NSTextView *)aTextView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString

لكن هذا لا يعطيني فقط السلسلة البديلة وليس السلسلة الكاملة التي أحتاجها للتحقق من الصحة. يمكنني استخدام النص لاحقًا

وجدت

- (void)textDidChange:(NSNotification *)aNotification 
- (void)controlTextDidChange:(NSNotification *)aNotification

ولكن عندما أتلقى هذا المكالمات ، يكون الوقت متأخرًا بالفعل ، وقد انتهى محتوى حقل النص الأخير بالفعل. إذن ما هي أفضل طريقة للتعامل مع هذا؟

ونعم قرأت ملزمة nstextfield إلى nsnumber لكنه لا يعطيني أي فكرة عن كيفية حل مشكلتي.

كل ما أحتاجه هو وظيفة اختبار "- (Bool) قبول NewValue (سلسلة NSString)". لماذا كل شيء معقد للغاية مع الكاكاو يبدأ في الشعور وكأنه MFC.

هل كانت مفيدة؟

المحلول

لقد حاولت استخدام وظيفة المندوب:

تقصد تنفيذ الطريقة. إن استخدامه يعني تسميته ، وهي مهمة NSTextView ، وهي طريقة موضوعية ، وليس وظيفة C.

- (BOOL)textView:(NSTextView *)aTextView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString

لكن هذا لا يعطيني فقط السلسلة البديلة وليس السلسلة الكاملة التي أحتاجها للتحقق من الصحة.

باستثناء ذلك: يمكنك أن تسأل عرض النص السلسلة الكاملة السابقة, تطبيق التغيير بنفسك إلى نسخة قابلة للتبديل من تلك السلسلة ، ثم التحقق من صحة السلسلة الناتجة. يعود NO إذا كان التغيير سيؤدي إلى إدخال غير صالح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top