मेरे पास popUpStatusItemMenu का उपयोग कर NSStatusItem से एक NSMenu पॉपिंग है। ये एनएसएमएनयूइटम विभिन्न लिंक का एक गुच्छा दिखाते हैं, और प्रत्येक एक सेटएक्शन से जुड़ा होता है: ओपनलिंक में: लक्ष्य की विधि। यह व्यवस्था लंबे समय से ठीक काम कर रही है। उपयोगकर्ता मेनू से एक लिंक चुनता है और ओपनलिंक: विधि उसके साथ सौदा करता है।NSMenuItem में कस्टम NSView माउस ईवेंट प्राप्त नहीं कर रहा है
दुर्भाग्यवश, मैंने हाल ही में एनएसएनएनयूइटम के सेट व्यू का उपयोग करने के साथ प्रयोग करने का निर्णय लिया: विधि एक अच्छा/स्लीकर इंटरफेस प्रदान करने के लिए। असल में, मैंने शीर्षक सेट करना बंद कर दिया, NSMenuItem बनाया, और उसके बाद सेट व्यू का उपयोग किया: कस्टम दृश्य प्रदर्शित करने के लिए। यह पूरी तरह से काम करता है, मेनू आइटम बहुत अच्छे लगते हैं और मेरा कस्टम व्यू प्रदर्शित होता है।
हालांकि, उपयोगकर्ता एक मेनू आइटम और विज्ञप्ति माउस, कार्रवाई अब काम नहीं करता चुनता है जब (अर्थात, openLink: कहा जाता है नहीं है)। अगर मैं बस सेटव्यू: कॉल पर टिप्पणी करता हूं, तो क्रियाएं फिर से काम करती हैं (बेशक, मेनू आइटम रिक्त हैं, लेकिन कार्रवाई ठीक से निष्पादित की जाती है)। मेरा पहला सवाल, फिर, एक दृश्य स्थापित करने से एनएसएमएनयूइटम की कार्रवाई टूट जाती है।
कोई बात नहीं, मैंने सोचा, मैं इसे अपने कस्टम दृश्य में mouseUp घटना का पता लगाने और वहाँ से मेरी कार्रवाई विधि को फोन करके ठीक कर देंगे। मैंने इस विधि को अपने कस्टम व्यू में जोड़ा:
- (void)mouseUp:(NSEvent *)theEvent {
NSLog(@"in mouseUp");
}
कोई पासा नहीं! इस विधि को कभी नहीं कहा जाता है। , हालांकि घटनाओं:
मैं ट्रैकिंग rects सेट और mouseEntered प्राप्त कर सकते हैं। इस प्रकार मैं अपने mouseEntered दिनचर्या में कुछ परीक्षण डाल:
not ignoring mouse events
canBecomeKeyWindow
not isKeyWindow
इस समस्या है:
if ([[self window] ignoresMouseEvents]) { NSLog(@"ignoring mouse events"); }
else { NSLog(@"not ignoring mouse events"); }
if ([[self window] canBecomeKeyWindow]) { dNSLog((@"canBecomeKeyWindow")); }
else { NSLog(@"not canBecomeKeyWindow"); }
if ([[self window] isKeyWindow]) { dNSLog((@"isKeyWindow")); }
else { NSLog(@"not isKeyWindow"); }
और निम्नलिखित प्रतिक्रियाओं मिल गया? "क्या हैविंडो नहीं है"? मुमकिन है यह अच्छा है क्योंकि एप्पल डॉक्स कहना नहीं है "उपयोगकर्ता एक राय यह है कि कुंजी विंडो में नहीं है, डिफ़ॉल्ट रूप से खिड़की आगे लाया और बनाया कुंजी है पर क्लिक करता है, लेकिन माउस घटना भेजा नहीं है, तो।" लेकिन इन घटनाओं का पता लगाने का एक तरीका होना चाहिए। कैसे?
जोड़ना:
[[self window] makeKeyWindow];
कोई प्रभाव नहीं, तथ्य यह है कि canBecomeKeyWindow हाँ है के बावजूद है।
खुला रडार पर इस समस्या के बारे में अधिक जानकारी नहीं है: http://openradar.appspot.com/7128269 भी एक का दावा किया वैकल्पिक हल नहीं है, लेकिन मैं वैकल्पिक हल काम नहीं कर सकता। असल में खिड़की सिर्फ कुंजी बनने से इंकार कर देती है, भले ही यह रिपोर्ट कर सकता है। – Dennis
हाय, मुझे एक ही समस्या का सामना करना पड़ा है, क्या आपके पास इसके साथ कोई प्रगति है? मैं इसे हल करने के लिए कुछ weired तरीके की कोशिश की है, मैं एक वैकल्पिक हल लेकिन इसके भयानक बदसूरत, और मेनू स्थिति पट्टी आइटम दिखा हाइलाइट नहीं किया गया के बाद पाया गया है, लेकिन मेनू दिखाया गया है और पूरी तरह से कार्य कर रहा है। मैंने स्थिति आइटम के लिए मेनू सेट किया है और मैन्युअल रूप से मेनू पॉपअप को नियंत्रित किया है। यदि एप्लिकेशन सक्रिय है तो मैं मेनू पॉपअप विधि को कॉल करता हूं, अगर नहीं, तो मैं एप्लिकेशन सक्रिय संदेश भेजता हूं, और कॉलबैक में मैं मेनू खोल रहा हूं। यहां कुछ कोड है। फिर से यह भयानक और बदसूरत। http://gist.github.com/224275 – iafonov
मुझे कहना है कि iafonov का कोड बढ़िया है! हालांकि एक साल पहले !!! हालांकि कोड अप्रासंगिक लगता है। धन्यवाद! यह NSSIew के बारे में सभी समस्याओं का समाधान करता है, NSMenEItem में NSTextEdit। सबसे पहले, NSTextEdit (NSMenuItem में), सामान्य रूप से काम नहीं करता है कुंजी दबाएँ और माउस परिवर्तन नहीं करता है प्राप्त नहीं कर सकते, अब सब कुछ अद्भुत काम करता है !!! कोई स्वीकार नहीं करता है फर्स्ट रेस्पॉन्डर, कोई स्वयं खिड़की नहीं है फर्स्ट रेस्पॉन्डर: xxx, बस iafonov'code। यह महत्वपूर्ण है कि मेन्यू पॉप अप करने का तरीका है। http://gist.github.com/224275 – user377808