मेरे पास एक दृश्य है जो UIViewController
(रूट) है जो विज्ञापनों को नियंत्रित करता है और UINavigationController
। उस UINavigationController में मैं नियंत्रकों की ठेठ परतें है। मेरी कस्टम सेटिंग्स तालिका में नियंत्रक देखें, मेरे पास समर्थन के लिए मुझसे संपर्क करने के लिए एक बटन है। जब उपयोगकर्ता इस बटन पर क्लिक करता है तो मैं MFMailComposeViewController
बनाता हूं और इसे प्रस्तुत करना चाहता हूं। मैं सेटिंग तालिका दृश्य से इसे प्रस्तुत नहीं कर सकता क्योंकि यह मेरे विज्ञापनों के नीचे होगा, इसलिए मुझे रूट व्यू को संदर्भित करने और इसे वहां से प्रस्तुत करने की आवश्यकता है। मैंने self.parentViewController.parentViewController
की कोशिश की है जहां स्वयं सेटिंग्स तालिका दृश्य है, लेकिन यह काम नहीं करता है। मुझे इसका संदर्भ कैसे देना चाहिए। यह रूट व्यू को सीधे संदर्भित करने और सेटिंग दृश्य में पास करने के लिए एक खराब डिज़ाइन की तरह लगता है।रूट UIViewController को कैसे ढूंढें
उत्तर
वर्तमान keyWindow प्राप्त करें:
UIWindow *window = [UIApplication sharedApplication].keyWindow;
अपने rootViewController प्राप्त करें:
UIViewController *rootViewController = window.rootViewController;
नोट: यदि वर्तमान में UIAlertView
दिखाया जा रहा है, तो एक नई हवा ओउ बनाया जा रहा है और keyWindow होने के लिए असाइन किया गया है। अन्य असाधारण मामले भी हो सकते हैं जो आपकी एप्लिकेशन विंडो को कुंजीविंडो नहीं रखेंगे।
यह केवल 4.0+ पर काम करता है। UIWindow में 4.0 से पहले रूटव्यू कंट्रोलर प्रॉपर्टी नहीं थी। –
@ जेसे अच्छा बिंदु - मुझे बहुत खुशी है कि मुझे उन प्राचीन ईंटों का समर्थन करने की ज़रूरत नहीं है;)। – Till
हाँ, यह बेकार है। मैं अपने समय का कम से कम 50% कहूंगा। –
ऐप सिंगलटन का उपयोग करें। कुछ की तरह:
[[[UIApplication sharedApplication] delegate] rootViewController]
अगर यह मिलना चाहिए अपने ViewController जड़ का नाम है यह है कि rootViewController
यूआईएप्लिकेशन ऑब्जेक्ट प्राप्त करें। कुंजीविंडो खोजने के लिए विंडोज सरणी के माध्यम से चक्र। और फिर rootViewController प्रॉपर्टी प्राप्त करें।
[[[[UIApplication sharedApplication] delegate] window] rootViewController]
नोट::
मेरे अनुभव में, यह प्राप्त करने के लिए rootViewController
आदर्श समाधान है में दर-मामला एक सक्रिय UIAlert
या UIActionSheet
की, तो आप अपने कुंजी विंडो के रूप में चेतावनी या कार्रवाई शीट मिल ।
+1 यह करने का यह एकमात्र सुरक्षित, विश्वसनीय तरीका है। एक चेतावनी + कुंजीविंडो बग को ट्रैक करने के लिए मेरे लिए उम्र ले ली, और इस पोस्ट ने मुझे बचाया! – stonemonk
दूसरा वह! कुंजीविंडो दृष्टिकोण (वर्तमान में सही उत्तर के रूप में चिह्नित) विश्वसनीय नहीं है, क्योंकि कुंजी विंडो बदल सकती है। –
को UIAlertView के दौरान कीविंडो का उपयोग करने के साथ भी एक बग था ... इसके लिए धन्यवाद! यह उपयोग करने का सबसे अच्छा तरीका है। – manroe
तुम हमेशा इस कोड के 1 लाइन के साथ हल कर सकते हैं, लेकिन मैं यह करने के लिए इस स्विफ्ट तरह से अनुशंसा करते हैं, तो आप कहीं से भी इस कॉल कर सकते हैं, इसकी भी दुर्घटना और बग सुरक्षित:
/// EZSwiftExtensions - Gives you the VC on top so you can easily push your popups
var topMostVC: UIViewController? {
var presentedVC = UIApplication.sharedApplication().keyWindow?.rootViewController
while let pVC = presentedVC?.presentedViewController {
presentedVC = pVC
}
if presentedVC == nil {
print("EZSwiftExtensions Error: You don't have any views set. You may be calling them in viewDidLoad. Try viewDidAppear instead.")
}
return presentedVC
}
यह एक मानक के रूप में शामिल समारोह में:
- 1. UIViewController
- 2. UIViewController
- 3. रूट को
- 4. UIViewController
- 5. UIViewController
- 6. रूट
- 7. UIViewController
- 8. UIViewController
- 9. UIViewController
- 10. UIViewController -viewDidLoad को
- 11. UIViewController में UINavigationBar को कैसे जोड़ा जाए?
- 12. स्क्रीन को कैसे ढूंढें एंड्रॉइड
- 13. UIViewController और UIview dealloc को
- 14. आईफोन UIViewController init विधि को
- 15. कैसे पता लगाएं कि UIViewController रूट व्यू कंट्रोलर है या नहीं?
- 16. फोर्स UIView/UIVIewController ओरिएंटेशन
- 17. एक UIViewController
- 18. प्रोग्राम UIViewController
- 19. उसी रूट रूट
- 20. ओटीपी प्रक्रिया के पर्यवेक्षक को कैसे ढूंढें?
- 21. रिकॉर्ड ऑरैकल के विभाजन को कैसे ढूंढें
- 22. लिनक्स कर्नेल बग को कैसे/कहाँ ढूंढें?
- 23. पंक्तियों को कैसे ढूंढें जिनमें लोअरकेस अक्षर
- 24. लिनक्स प्रोसेसर/चिप आर्किटेक्चर को कैसे ढूंढें
- 25. आरसीपीपी को नया मॉड्यूल कैसे ढूंढें?
- 26. असंगत तारों को कैसे ढूंढें। NSLocalizedString()
- 27. सभी बाल प्रक्रियाओं को कैसे ढूंढें?
- 28. डीसी के आयामों को कैसे ढूंढें?
- 29. कोड को कैसे ढूंढें जिसे केवल
- 30. छवि के घूर्णन कोण को कैसे ढूंढें?
आप self.navigationController की कोशिश की? मैं स्पष्ट नहीं हूं कि आपका दृश्य पदानुक्रम कैसे स्थापित किया गया है। – jaminguy