2011-11-22 5 views
82

हाल ही में मैं इस तथ्य के बारे में सोच रहा हूं कि आईओएस ऐप में केवल UIWindow है। यह एक और UIWindow बनाने और इसे स्क्रीन पर रखने के लिए एक समस्या प्रतीत नहीं होता है।आईओएस ऐप में एक और UIWindow जोड़ने के फायदे, समस्याएं, उदाहरण?

मेरा प्रश्न एक तरह से अस्पष्ट है, लेकिन मैं में दिलचस्पी रखता हूँ:

  • क्या मैं संभवतः एक दूसरे UIWindow कि अन्य तरीकों से नहीं किया जा सकता के साथ प्राप्त कर सकते थे?
  • एकाधिक UIWindow उदाहरणों का उपयोग करते समय क्या गलत हो सकता है?
  • मैंने देखा है कि लोग आईफोन पर विचारों जैसे पॉपओवर प्रदर्शित करने के लिए दूसरे UIWindow का उपयोग करते हैं। क्या यह करने का यह एक अच्छा तरीका है? क्यूं कर? क्यों नहीं?
  • क्या ऐसे अन्य उदाहरण हैं जहां यह UIWindow रखने के लिए पूरी तरह से समझ में आता है?

ऐसा नहीं है कि मैं कुछ याद कर रहा हूँ नहीं है। मैंने कभी भी UIWindow उदाहरण बनाने की आवश्यकता महसूस नहीं की है, लेकिन शायद यह उन अद्भुत चीजों को करने की अनुमति देगी जिन्हें मैं नहीं जानता! :-)

मुझे उम्मीद है कि यह मुझे इस समस्या को हल करने में मदद कर सकता है: मुझे वर्तमान में जो कुछ भी प्रदर्शित होता है उस पर "कवर व्यू" जोड़ना होगा। यदि पहले से ही एक या अधिक मोडल नियंत्रक प्रस्तुत किए गए हैं तो यह भी काम करना चाहिए। यदि मैं रूट नियंत्रक के दृश्य में UIView जोड़ता हूं, तो मोडल नियंत्रक शीर्ष पर बैठते हैं, इसलिए पॉपओवर नियंत्रक करें। यदि मैं कवर व्यू को सामान्य रूप से प्रस्तुत करता हूं और पहले से ही एक मोडल नियंत्रक है, तो स्क्रीन का केवल एक हिस्सा शामिल है।

+0

आईओएस अनुप्रयोगों http://shaune.com.au/using-multiple-uiwindows-in-ios-applications/ – onmyway133

उत्तर

19

UIWindow सिस्टम कीबोर्ड जैसे अन्य यूआई तत्वों से ऊपर तैर सकता है।

अपने अंतिम अनुच्छेद को संबोधित करने के लिए: अपने मुख्य विंडो के रूप में ही फ्रेम के साथ एक UIWindow करें। windowLevel संपत्ति को UIWindowLevelStatusBar पर सेट करें। hidden संपत्ति को NO पर सेट करें।

+0

अरे, ठीक में कई UIWindows का उपयोग करना। धन्यवाद। मैं जानता था कि। क्या आप मेरे प्रश्नों को विस्तार से बता सकते हैं? क्या आप जानते हैं कि एक सेकेंड के आरआईडी कैसे प्राप्त करें UIWindow जिसे makeKeyAndVisible द्वारा जोड़ा गया था? – Krumelur

+0

दूसरी UIWindow की छिपी हुई संपत्ति को YES पर सेट करें। –

+0

मैंने अपना जवाब संशोधित किया है। –

92

रोब का जवाब मैं थोड़ा के आसपास खेला और इस विषय पर जानकारी प्राप्त करने की कोशिश दूसरों के लिए कुछ नोट लिख चाहते हैं के साथ शुरू:

  • यह एक समस्या बिल्कुल भी एक और UIWindow जोड़ने के लिए नहीं है। बस एक और makeKeyAndVisible बनाएं। किया हुआ।
  • एक और विंडो दृश्यमान बनाकर इसे हटाएं, फिर जिसकी आपको आवश्यकता नहीं है उसे छोड़ दें।
  • "कुंजी" वाली विंडो सभी कीबोर्ड इनपुट प्राप्त करती है।
  • UIWindow सबकुछ, यहां तक ​​कि मोडल, पॉपओवर इत्यादि शामिल हैं शानदार!
  • UIWindow हमेशा चित्रित होता है। यह कोई घुमावदार नहीं है। आपको नई विंडो के रूट नियंत्रक के रूप में नियंत्रक जोड़ना होगा और उसे रोटेशन को संभालने देना होगा। (बस मुख्य विंडो की तरह)
  • विंडो का स्तर निर्धारित करता है कि यह "उच्च" कैसे प्रदर्शित होता है। इसे सब कुछ कवर करने के लिए इसे UIWindowLevelStatusBar पर सेट करें। इसकी hidden संपत्ति को NO पर सेट करें।
  • एक दूसरा UIWindow का उपयोग स्क्रीन पर विचार लाने के लिए किया जा सकता है जो सब कुछ के ऊपर तैरता है। UIPopoverController में एम्बेड करने के लिए बस एक डमी नियंत्रक बनाने के बिना।
  • यह आईफोन पर विशेष रूप से उपयोगी हो सकता है जहां कोई पॉपओवर नियंत्रक नहीं है लेकिन जहां आप ऐसा कुछ नकल करना चाहते हैं।
  • और हां, यह निश्चित रूप से मेरी समस्या का समाधान करता है: यदि ऐप सक्रियण से इस्तीफा दे देता है, तो जो भी वर्तमान में आईओएस को आपके ऐप की वर्तमान सामग्री का स्क्रीनशॉट लेने से रोकने के लिए दिखाया गया है, उस पर एक कवर विंडो जोड़ें।
+0

यदि आपके उत्तर के लिए नहीं तो मुझे एक और UIWindow का उपयोग करने का साहस नहीं होता। [यह] (http://stackoverflow.com/a/6698102/458193) भी बेहद सहायक था क्योंकि दूसरा UIWindow अपने आप पर autorotate नहीं होगा। –

+1

बहुत प्रबुद्ध पोस्ट। लेकिन क्या होता है यदि आप इस विंडो को इस्तीफा देते हैं और अंतर्निहित विंडो कुंजी और दृश्यमान बनाते हैं और यह अंतर्निहित विंडो की रूटव्यू कंट्रोलर में वर्तमान में एक मोडल नियंत्रक प्रस्तुत किया गया है? क्या यह मोडल व्यू कंट्रोलर को वापस पेश करेगा? हमारे आवेदन में क्या होता है कि rootViewController को मॉडल नहीं दिया गया है ... –

+0

@ क्रेमलूर यह ठीक है। मुझे एक शंका है। यह कहता है कि दूसरा UIWindow सभी मौजूदा विचारों के शीर्ष पर प्रदर्शित होता है। जब उपयोगकर्ता दृश्य पर एक बटन क्लिक करता है जो कि पहले UIWindow में है जो एक और व्यू कंट्रोलर प्रस्तुत कर रहा है। यह दूसरा UIWindow छिपाएगा। इस UIWindow को पूरे ऐप में हमेशा प्रदर्शित करने के लिए कैसे करें। –