2012-01-13 10 views
5

यहाँ विचार है:किसी अन्य NSView के अंतर्गत NSView ईवेंट को कैसे अवरुद्ध करें?

मैं एक NSWindow 2 NSView युक्त है, उन्हें ViewA और ViewB फोन करते हैं।

व्यूए में सबव्यू ऑब्जेक्ट्स की एक सूची है, प्रत्येक ऑब्जेक्ट का अपना ट्रैकिंग क्षेत्र सेट होता है और माउसडाउन ईवेंट को संभालता है। व्यूबी एक छुपा दृश्य है, जो व्यूए के ऊपर दिखाई देता है।

समस्या तब होती है जब व्यूबी दिखाई देता है, व्यूए अभी भी माउसडाउन ईवेंट प्राप्त करता है। तो जब मैं व्यूबी पर क्लिक करता हूं, तो व्यूबी के पीछे ऑब्जेक्ट माउसडाउन ईवेंट प्राप्त करता है। मैं जानना चाहता हूं कि व्यूए की घटनाओं को अवरुद्ध करने का कोई तरीका है, जबकि व्यूबी इस पर है।

मुझे पता है कि मैं प्रत्येक ऑब्जेक्ट से ट्रैकिंग क्षेत्र को हटा सकता हूं, लेकिन यह अभी भी माउसडाउन ईवेंट का जवाब देता है।

उत्तर

-5

आप भी [ViewA setAcceptsTouchEvents:NO]; द्वारा ViewA के लिए स्पर्श इवेंट निष्क्रिय कर सकते हैं और YES फिर से सेट करके अपने आवश्यकता के अनुसार उन्हें फिर से सक्षम कर सकते हैं।

+0

मुझे विश्वास है कि केवल * स्पर्श * घटनाओं को प्रभावित करता है (यानी ट्रैकपैड विशिष्ट संकेत)। मैं उम्मीद करता हूं कि माउस और कीबोर्ड ईवेंट उस सेट के साथ काम करने के लिए जारी रहेगा। – ipmcc

0

यदि बी देखें ए का एक सबव्यू है, तो समस्या यह है कि यह छिपा हुआ है। इसे छिपाएं: बस अपनी अस्पष्टता 0 पर सेट करें। इस तरह आप इसे नहीं देख पाएंगे, लेकिन उत्तरदाता श्रृंखला होगी।

+0

व्यूबी एनएसविंडो का एक सबव्यू भी है। लेकिन मैं कोशिश करूँगा। धन्यवाद! – QyoDeveloper

1

आप एनएसविंडो पर sendEvent: विधि ओवरराइड कर सकते हैं और [super sendEvent:event] पर कॉल करने की तुलना में 'प्रथम रेस्पॉन्डर' का परीक्षण कर सकते हैं, तो ViewA को कोई ईवेंट प्राप्त नहीं होगा।

0

यदि कोई भी आज भी इस तरह के प्रश्नों के उत्तर की तलाश में है, तो मैं केवल this accepted answer में वर्णित समाधान के साथ इसे करने में कामयाब रहा। इसके अलावा, आप पारदर्शी (/ साफ रंग का) खिड़की बनाने के लिए, लेकिन अभी भी उस पर माउस घटनाओं प्राप्त करना चाहते हैं, कार्रवाई में इस लाइन डाल रूप में अच्छी तरह:

[overlayWindow setIgnoresMouseEvents:NO]; 
0

सहोदर ब्लॉक देखता है, वंशज विचारों बच्चे के रूप में न होगा अपने माता-पिता को अपस्ट्रीम माउस घटनाओं का प्रचार करें। अपने माता-पिता को घटनाओं का प्रचार करने वाले वंशजों को अवरुद्ध करने के लिए आपको बच्चे में घटना को पार करना होगा और उसी घटना पर सुपर कॉल नहीं करना चाहिए। सुपर कॉलिंग घटना को अपने माता-पिता को प्रेरित करेगी। यहां घटनाओं पर एक पूर्ण स्पष्टीकरण है और भाई/अवरोही विचारों को झुकाव है: (इसके घने चेतावनी दीजिये) http://stylekit.org/blog/2016/01/28/Hit-testing-sub-views/

संबंधित मुद्दे