Capture Key Press Event باستخدام NSNotificationCenter
-
27-09-2019 - |
سؤال
هذا الحلتلقي أحداث لوحة مفاتيح 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
هو عادة مكان جيد لوضع كود مثل هذا.