سؤال

هذا الحلتلقي أحداث لوحة مفاتيح iPhone

يوفر وسيلة لالتقاط حدث Keypress باستخدام مركز الإخطار.

[nsnotificationcenter defaultCenter] addobserver: محدد ذاتي: selector (keypression :) الاسم: uitextfiledtextDidChangenotification كائن: nil] ؛

[nsnotificationcenter defaultCenter] addobserver: محدد ذاتي: selector (keypression :) الاسم: uitextViewTextDidChangenotification كائن: nil] ؛

........

-(void) keypressed: (nsnotification*) الإخطار {nslog ([[كائن الإخطار] النص]) ؛ }

إنه يعمل بشكل جيد ، ولكن لكل مفتاح يتم الضغط عليه من لوحة المفاتيح ، يتم استدعاء وظيفة keypressed 3 مرات.

هل هذا طبيعي أم أفعل شيئًا خاطئًا؟

تيو

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

المحلول

يجب أن يظهر الإشعار مرة واحدة فقط لكل مفتاح مضغوط. على الأقل هذا ما أحصل عليه عند الاختبار. الشيء الوحيد الذي يمكنني التفكير فيه هو أنك تتصل addObserver:selector:name:object: ثلاث مرات.

ربما تقوم بذلك في العديد من وحدات التحكم في العرض وتنسى الاتصال removeObserver:name:object:?

أو تتصل addObserver:selector:name:object: في وظيفة تسمى عدة مرات؟ viewDidLoad هو عادة مكان جيد لوضع كود مثل هذا.

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