10

मैं नीचे की तरह एक दृश्य नियंत्रक पेश मोडल करने के लिए कोशिश कर रहा हूँ:संक्रमण के साथ UIModalPresentationCurrentContext?

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"addPopover"]; 
vc.view.backgroundColor = [UIColor clearColor]; 
self.modalPresentationStyle = UIModalPresentationCurrentContext; 
[self presentModalViewController:vc animated:YES]; 

अभी सेवा का उपयोग UIModalPresentationCurrentContext का मतलब है मैं एक पारदर्शी पृष्ठभूमि के साथ इस दृश्य प्रस्तुत करते हैं और नया एक के पीछे मेरे दूसरे दृश्य देख सकते हैं। हालांकि, यह मुझे एक संक्रमण के साथ पेश करने में सक्षम होने से रोकता है।

कोई विचार क्यों? या मैं इस के आसपास कैसे हो सकता है? धन्यवाद।

+0

आप जिस व्यू कंट्रोलर से प्रस्तुत कर रहे हैं उसकी प्रेजेंटेशन शैली क्या है? – brynbodayle

+0

@bbodayle, मुझे एक ही समस्या है, और मैंने व्यू कंट्रोलर दोनों पर सभी प्रस्तुति शैलियों/संयोजनों का प्रयास किया है। –

उत्तर

11

पूर्ण स्क्रीन मोड आपको परत के नीचे देखने की अनुमति नहीं दे रहे हैं। मुझे परेशान है।

अपने कोड से मैं मान रहा हूं कि "एडपॉपवर" वास्तव में एक पूर्ण स्क्रीन दृश्य है, जहां आपकी उप-धारा के रूप में आपकी सामग्री है जबकि बाकी पारदर्शी है।

इस प्रयास करें:

vc.modalPresentationStyle = UIModalPresentationCurrentContext; 
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self presentViewController:vc animated:YES completion:NULL]; 

नोट: मैं उपयोगकर्ता को पता है कि वे दृश्य के बाकी के साथ बातचीत नहीं कर सकते हैं जब आप शीर्ष पर इस पॉप जाने के लिए एक कम अल्फा पृष्ठभूमि रंग जोड़ने की सलाह देते हैं। ..

+1

यहां क्या अलग है? लक्ष्य दृश्य पर modalTransitionStyle को सेट करने से कोई फर्क नहीं पड़ता और न ही मौजूदा दृश्य नियंत्रक का उपयोग वर्तमान मॉड्यूल व्यू कंट्रोलर पर किया। –

+0

'शैली' के बजाय संक्रमण शैली को 'vc' पर निर्दिष्ट करना, और 'presentViewController' विधि का उपयोग करना। अपने स्टोरीबोर्ड को देखे बिना यह निदान करना मुश्किल है कि यह काम नहीं करता है। उपर्युक्त विधि के साथ, आपके ओवरलाइड वीसी को "स्व" (या आकार बदलने में सक्षम) के समान आकार होना चाहिए –

+2

हां, मेरी प्रोजेक्ट में, व्यू कंट्रोलर दोनों एक ही आकार के हैं। मैंने आपके कोड की कोशिश की और कोई बदलाव नहीं हुआ। संपत्ति सेटिंग 'modalPresentationStyle = UIModalPresentationCurrentContext' को यहां स्वयं को लागू करने की आवश्यकता है, vc नहीं। मुझे लगता है कि मुझे इस पर बक्षीस देने की बजाय अपना खुद का सवाल शुरू करना होगा क्योंकि यहां कोई समाधान नहीं है, भले ही इसे एक के रूप में चिह्नित किया गया हो। –

25

मैं अपने UIWindow के रूट व्यू कंट्रोलर पर modalPresentationStyle = UIModalPresentationCurrentContext सेट करके इसे पूरा करने में सक्षम था, अगर मैंने इस रूटव्यू कंट्रोलर के शीर्ष पर कोई नया पूर्ण स्क्रीन दृश्य नियंत्रक प्रस्तुत नहीं किया है।

UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController; 
rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext; 
[self presentViewController:vc animated:YES completion:nil]; 

मैं दोनों मेरी खिड़की के rootViewController के रूप में एक UINavigationController और विभिन्न अन्य कस्टम दृश्य नियंत्रकों के साथ इस की कोशिश की है: मैं कुछ इस तरह से किया था। ऐसा लगता है जब तक कि विंडो की रूटव्यू कंट्रोलर जानता है कि क्या हो रहा है, कोई उप-दृश्य नियंत्रक अंतर्निहित दृश्य को ब्लैक-आउट किए बिना presentViewController:animated:completion: पर कॉल कर सकता है।

हालांकि, मान लीजिए कि आप अपनी विंडो के रूट व्यू कंट्रोलर के शीर्ष पर एक और दृश्य नियंत्रक प्रस्तुत करते हैं। और यह नया दृश्य नियंत्रक modalPresentationStyle = UIModalPresentationFullScreen (यानी स्क्रीन लेता है) के साथ प्रस्तुत किया जाता है, तो आपको उस शीर्ष-दृश्य दृश्य नियंत्रक पर modalPresentationStyle = UIModalPresentationCurrentContext पर कॉल करना होगा।

संक्षिप्त करने के लिए

तो:

  • आप UINavigationController है -> UIViewController (रों) (वे और धक्का दिया जा सकता है और पॉप आउट), तो आप modalPresentationStyle = UIModalPresentationCurrentContext UINavigationController पर निर्धारित किया है।
  • यदि आपके पास UINavigationController -> UIViewController -> नया-UIViewController (modalPresentationStyle UIModalPresentationFullScreen पर सेट है) के साथ, तो आप नए UIViewController पर modalPresentationStyle = UIModalPresentationCurrentContext सेट करते हैं।

उम्मीद है कि यह आपके लिए भी काम करता है!

+1

यह मेरे लिए काम किया। कुंजी प्रस्तुत करने वाले दृश्य नियंत्रक पर modalPresentationStyle सेट कर रहा था, दृश्य नियंत्रक प्रस्तुत नहीं किया जा रहा था। –

+0

क्या होगा यदि आप इसे UISplitViewController पर प्रस्तुत कर रहे हैं? –

+0

इसके लिए धन्यवाद! –

0

श्री टी के सुझावों लगभग पूरी तरह से, आप बस प्रस्तुत ViewController

चूंकि यह भी appDelegates rootviewController की प्रस्तुति की शैली स्थापित कर रही है, यह भी निकाल देंगे संक्रमण किसी भी विचारों के लिए कि से प्रस्तुत एनिमेशन पर संक्रमण एनीमेशन खोना काम किया बिंदु।

मेरे ठीक AppDelegates rootViewController की प्रस्तुति की शैली वापस लौटने के लिए यह डिफ़ॉल्ट जब भी ViewController बंद कर दिया है कि मैं

पर पारदर्शी पृष्ठभूमि की जरूरत मैं एक बटन है कि presentedViewController को खारिज करते हुए कि में मैं भी प्रस्तुति की स्थापना की है है के लिए गया था rootViewController की शैली का उपयोग डिफ़ॉल्ट रूप से वापस करने के लिए:

UIViewController *rootViewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; 
    rootViewController.modalPresentationStyle = UIModalPresentationFullScreen; 

मुझे उम्मीद है कि इस समस्या पर किसी और को फंसने में मदद मिलेगी।

संबंधित मुद्दे