2010-12-19 13 views
6

सक्रिय किए बिना एक मॉडल एनएसविंडो दिखा रहा है मेरे पास NSStatusItem है जो मेनूबार में ठीक से प्रदर्शित हो रहा है। आइटमों में से एक (जब क्लिक किया गया) मेरे आवेदन से एक मॉडल एनएसविंडो प्रदर्शित करता है, जो एक-ऑफ कार्य करने के लिए है, फिर गायब हो जाता है। (उदाहरण के लिए उपयोगकर्ता एक छोटे से पाठ में प्रवेश करता है, "सहेजें" पर क्लिक करता है, और मोडल एनएसविंडो चला जाता है।)अन्य अनुप्रयोग विंडोज़

समस्या तब होती है जब एप्लिकेशन पृष्ठभूमि में चल रहा है। मोडल विंडो ठीक से दिखाई देती है जो कि अग्रभूमि में जो भी एप्लिकेशन चल रहा है, लेकिन जब उपयोगकर्ता "सेव" बटन पर क्लिक करता है, तो शेष एप्लिकेशन की खिड़कियां भी सक्रिय होती हैं। यह अवांछनीय है, क्योंकि उपयोगकर्ता को तब भी क्लिक करना होगा जो वे उपयोग कर रहे थे। (NSStatusItem की सुविधा को नष्ट।) मैं मोडल विंडो का उपयोग कर प्रदर्शित कर रहा हूँ:

[myWindow setFrame:finalRect display:YES animate:NO]; 
[myWindow setLevel:NSPopUpMenuWindowLevel]; 
[NSApp runModalForWindow:myWindow]; 

वहाँ आवेदन के बाकी के कारण सक्रिय बनने के लिए से अपने पॉप अप विंडो में क्लिक/घटनाओं को रोकने के लिए कोई तरीका है? या एनएसएपीपी को यह जानने का एक तरीका है कि यह विशेष पैनल स्वचालित रूप से बाकी ऐप को सक्रिय नहीं करना चाहिए? धन्यवाद!

उत्तर

16

इसके बजाय एक NSWindow बनाने के बजाय, शैली NSNonactivatingPanelMask के साथ एक NSPanel बना सकते हैं। इसके बाद आप आवश्यकतानुसार पैनल को दिखाने/छिपाने के लिए सामान्य makeKeyAndOrderFront: और orderOut: कर सकते हैं।

+0

पूरी तरह से काम करता है (और बस), धन्यवाद! –

1

कोको-देव की सूची पर केन Thomases द्वारा एक समाधान एक दो साल पहले लागू यहाँ भी दिखता है:

[[NSApplication sharedApplication] hide:self]; 
[[NSApplication sharedApplication] performSelector:@selector (unhideWithoutActivation) withObject:nil afterDelay:0.05]; 

कौन सा सिद्धांत रूप में अपने आप को छुपा और खिड़की ढेर के नीचे सामने लाने के लिए आवेदन बताता है।

तुम भी माउस क्लिक घटना रोकना और का उपयोग [NSApp preventWindowOrdering]

+0

धन्यवाद, मैं इसे आजमाइए और आप जानते हैं कि यह कैसे काम करता है दूँगा:

उदाहरण है कि यह कैसे उपयोग करने के लिए यहां एक नज़र डालें। –

+0

नहीं, उस विंडो में कहीं भी क्लिक करना अभी भी संबंधित एप्लिकेशन विंडो को अग्रभूमि में लाता है। –

0

आप की तरह कुछ की कोशिश कर सकते हैं:

... 
if ([NSApp isHidden]) 
    [myWindow makeKeyAndOrderFront:self]; 
else 
    [NSApp runModalForWindow:myWindow]; 
... 

और जब खत्म:

... 
if ([NSApp isHidden]) 
    [myWindow orderOut:self]; 
else 
    [NSApp stopModal]; 
... 
संबंधित मुद्दे