2011-02-06 28 views
5

क्या एनएसपीनल कुंजी विंडो स्थिति (मुख्य एप्लिकेशन विंडो इस्तीफा कुंजी) के बिना एनएसपीनल पहली प्रतिक्रियाकर्ता स्थिति के अंदर एनएसवी व्यू देना संभव है?एनएसपीनल में एनएसवी व्यू को मुख्य विंडो स्थिति के बिना पहले उत्तरदाता बनाएं

धन्यवाद।

उत्तर

6

ठीक है, मैंने इसे बाहर निकालने का अंत किया, लेकिन इसमें बहुत सारे शोध हुए, इसलिए यदि कोई और एक ही समस्या में चलता है तो मैं यहां विवरण पोस्ट करूंगा। सबसे पहले, कुछ मूल बातें:

  1. यह 2 खिड़कियों के लिए जगह असंभव है वास्तव में एक ही समय में महत्वपूर्ण हो
  2. यह सोच यह कुंजी है -isKeyWindow अधिभावी द्वारा में नकली एक खिड़की करने के लिए हो, लेकिन उसमें नहीं देंगे विंडो में निहित विचार पहली प्रतिक्रियाकर्ता स्थिति।

मेरे परिदृश्य:

मैं (कारण irrelavant है) अपने मुख्य अनुप्रयोग विंडो में एक NSTableView युक्त एक चाइल्ड विंडो गयी। NSBorderlessWindowMask के साथ बाल खिड़की NSPanel थी। मैं NSTableView पैनल को मुख्य खिड़की के बिना पहली प्रतिक्रियाकर्ता स्थिति देना चाहता था क्योंकि यह मुख्य खिड़की से फोकस ले गया था (और बच्चे की खिड़की के भ्रम का पूरा बिंदु बच्चे की खिड़की को दिखाना था जैसे कि यह मुख्य खिड़की का हिस्सा था)।

पहली चीज मैंने कोशिश की थी कि तालिका दृश्य को बेवकूफ़ बना रहा था कि यह isKeyWindow को YES वापस करने के लिए ओवरराइड करके कुंजी विंडो के अंदर था। इसने तालिका दृश्य को आकर्षित किया जैसे कि यह पहला उत्तरदाता था, लेकिन फिर भी इसे पहले उत्तरदाता की स्थिति नहीं दी।

समाधान:

तो डिफ़ॉल्ट रूप से, NSBorderlessWindowMask खिड़की कुंजी बनने के लिए अनुमति नहीं दी जाएगी। तालिका को पहले उत्तरदाता को देखने के लिए, विंडो को कुंजी होना था, इसलिए YES वापस करने के लिए सीमाहीन विंडो उपclass में canBecomeKeyWindow ओवरराइड किया गया। यह, ज़ाहिर है, मुख्य खिड़की से महत्वपूर्ण स्थिति ले ली, जो उन चीजों में से एक था जिन्हें मैं टालना चाहता था। इसे ठीक करने के, मैं अपने मुख्य खिड़की subclassed और overrode निम्न विधियों:

- (BOOL)isMainWindow 
{ 
    return YES; 
} 

- (BOOL)isKeyWindow 
{ 
    return ([NSApp isActive]) ? YES : [super isKeyWindow]; 
} 

यह उपवर्ग जांच करता है कि आवेदन सक्रिय है, और अगर यह होता है, यह हमेशा रिटर्न YES ताकि कोई बात नहीं क्या खिड़की सक्रिय है आपके आवेदन में, मुख्य विंडो हमेशा व्यवहार करेगी जैसे कि यह अभी भी महत्वपूर्ण है। इस प्रकार का भ्रम देता है कि आपके पास एक ही समय में कई खिड़कियां कुंजी हो सकती हैं और आपको मुख्य विंडो स्थिति को अपनी मुख्य विंडो पर खोए बिना किसी अन्य विंडो में स्थानांतरित करने में सक्षम बनाती हैं। उम्मीद है की यह मदद करेगा!

+0

बहुत बढ़िया जवाब। मेरी सुबह बचाई धन्यवाद! –

+0

क्या यह संभव है कि यह समाधान 10.8 का उपयोग करके और अधिक काम नहीं करेगा? – tungsten

+0

"काम नहीं करता" से आपका क्या मतलब है? –