मुझे अपनी खिड़की पर ध्यान केंद्रित किए बिना तीसरे पक्ष के अनुप्रयोगों के ऊपर एक विंडो (शीर्षक बार के बिना) दिखाने की ज़रूरत है।सक्रिय किए बिना विंडो दिखाएं (इसे नीचे सक्रिय एप्लिकेशन रखें)
मैंने NSPanel
का उपयोग करने और गैर-सक्रियण सक्षम करने की सेटिंग करने का प्रयास किया है, लेकिन इससे मदद नहीं मिली।
मैंने orderFront:self
की कोशिश की, लेकिन इससे कोई मदद नहीं मिली।
मुझे हमेशा [NSApp activateIgnoringOtherApps:YES];
जोड़ने की आवश्यकता है क्योंकि विंडो अन्यथा नहीं दिखाएगी।
मैं यहाँ सिर्फ इस कार्यक्षमता के लिए एक नमूना परियोजना है:
http://users.telenet.be/prullen/TopW2.zip
UIElement
आवेदन के plist फ़ाइल में true
के लिए निर्धारित है, इसलिए कोई गोदी है। आप एक ही समय में ALT + SPACE
दबाकर विंडो को सक्रिय कर सकते हैं। आप देखेंगे कि इसके नीचे वाला ऐप फोकस खो देता है। इसे ठीक करने के तरीके पर कोई विचार? मैंने देखा है कि अन्य ऐप्स ऐसा करते हैं इसलिए मुझे पता है कि यह संभव है।
संपादित करें: यहां तक कि कोड अब तक है। याद रखें कि खिड़की एक गैर-सक्रिय एनएसपीनल है। मुझे अभी भी उस अंतिम NSApp activateIgnoringOtherApps
लाइन की आवश्यकता है या अन्यथा यह प्रदर्शित नहीं होता है। लेकिन निश्चित रूप से खिड़की को सक्रिय बनाता है।
_windowController = [[MyWindowController alloc] initWithWindowNibName:@"MyWindowController"];
[[_windowController window] setLevel:NSNormalWindowLevel+1];
[[_windowController window] orderFrontRegardless];
[_windowController showWindow:self];
[NSApp activateIgnoringOtherApps:YES];
मैं भी NSPanel subclassed है और दो तरीकों कहा:
- (BOOL)canBecomeKeyWindow
{
return YES;
}
- (BOOL)canBecomeMainWindow
{
return YES;
}
संपादित करें: ठीक है, setHidesOnDeactivate फिक्स इस अनचेक, लेकिन अब खिड़की छिपाने कभी नहीं होगा। जब मुझे उपयोगकर्ता नीचे ऐप दबाता है या किसी अन्य ऐप पर स्विच करता है तो मुझे इसे छिपाने की आवश्यकता होती है।
संपादित करें 2: वहाँ एक बेहतर तरीका है
- (void)awakeFromNib
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideWindow) name:NSWindowDidResignKeyNotification object:nil];
}
- (void)hideWindow {
[self setHidesOnDeactivate:YES];
}
सुनिश्चित नहीं हैं: ठीक है, यह ऊपर इस मुद्दे को ठीक करने लगता है।
और उन है कि कैसे विंडो प्रदर्शित करने के लिए जानना चाहता हूँ:
[[_windowController window] setLevel:NSPopUpMenuWindowLevel];
[[_windowController window] orderFrontRegardless];
[[_windowController window] makeKeyWindow];
[_windowController showWindow:self];
धन्यवाद करने के लिए बदलने के लिए, दुर्भाग्य से यह अभी भी काम नहीं करता। मुझे अभी भी सक्रिय IgnoringOtherApps जोड़ने की आवश्यकता है: सत्य कॉल, अन्यथा यह नहीं दिखाता है। और निश्चित रूप से यह कॉल सक्रिय विंडो बनाता है। – Wesley
@Wesley अनचेक अपने एनआईबी में पैनल के लिए "निष्क्रिय पर छिपाएं" अनचेक करें। – puzzle
धन्यवाद, मैंने इसके बारे में क्यों नहीं सोचा? ऑर्डरफ्रंट रेगेर्डलेस और सेटलेवल के साथ यह विकल्प, अंत में काम करता है। धन्यवाद! – Wesley