2011-10-18 13 views
23

मैं निम्नलिखित कोड का उपयोग कर मॉडल पेश कर रहा हूँ में मोडल खारिज करने के बाद कहा जाता है नहीं है:आईओएस 5: -viewWillAppear आईपैड

AddName *add = [[AddName alloc] initWithNibName:@"AddName" bundle:nil] 
add.modalPresentationStyle = UIModalPresentationFormSheet; 

[self presentModalView:add animated:YES]; 

और मेरे काम करने के बाद मैं निम्नलिखित का उपयोग कोड मेरा मुख्य दृश्य पर वापस जाने के लिए।

[self dismissModalViewControllerAnimated:YES]; 

तो यह डिफ़ॉल्ट रूप से -viewWillAppear पर कॉल करने के लिए उपयोग करता है।

मेरे समस्या यह है कि,

यह iOS4.3 साथ ठीक काम कर रहा था।

लेकिन यह आईओएस 5 के साथ काम नहीं कर रहा है।

मुझे क्या करना चाहिए? या आईओएस 5 में कोई भी बग है?

+0

क्या समस्या है-viewWillAppear को नहीं कहा जाता है? या यह है कि मोडल विंडो प्रस्तुत नहीं किया जा रहा है? – gaige

+0

@gaige: YES -viewWillAppear को – Devang

+0

@Devang नहीं कहा जाता है: 'add.modalPresentationStyle = UIModalPresentationFormSheet निकालें; 'और यह viewWillAppear विधि को कॉल करेगा। कृपया इसके बारे में जांचें। –

उत्तर

11

-viewWillAppear केवल उन जगहों पर कॉल करने की गारंटी है जहां -viewWillDisappear भी कहा जाता है। आईपैड पर अधिकांश मोडल विंडोज़ के लिए, यह मामला नहीं है, क्योंकि वे पूरे पृष्ठ को अस्पष्ट नहीं करते हैं।

आपकी समस्या का हल क्या आप के लिए -viewWillAppear की जरूरत पर निर्भर करेगा, लेकिन सामान्य रूप में, आप एक ही स्थान है कि आप मोडल दृश्य नियंत्रक खारिज से सीधे कॉल करने के लिए आवश्यकता होती है।

इसके लिए एक आम तंत्र, विशेष रूप से उन मामलों में जहां आप कहीं भी उसी मोडल व्यू का उपयोग कर सकते हैं, मोडल व्यू कंट्रोलर को एक प्रतिनिधि को देना है जिसे दृश्य गायब होने के बारे में कहा जाता है। यह आपको मोडल विंडो से प्रतिक्रिया लेने का मौका देगा, या यहां तक ​​कि प्रतिनिधि दृश्य में डेटा रीलोड को भी मजबूर करेगा।

उम्मीद है कि इससे मदद मिलती है।

+6

आईओएस 5 में एक प्रतिनिधि के बजाय आप [[स्वयं प्रस्तुत करने वाला कंट्रोलर] व्यूविल्लएपियर: हाँ] का प्रयास कर सकते हैं; – NJones

+0

@NJones जबकि यह सच है कि आप ViewWillAppear को कॉल कर सकते हैं: मैं इसका सुझाव दूंगा, क्योंकि इसके अन्य दुष्प्रभाव हैं (दस्तावेज़ीकरण नोट्स के बाद से आपको सुपर कॉल करना होगा)। – gaige

+0

मुझे लगता है कि आप का मतलब है कि आप इसका सुझाव नहीं देंगे? – NJones

9

आईओएस 5 ने निश्चित रूप से viewWillAppear और viewWillDisappear पर अपनी कॉल बदल दी। उदाहरण के लिए, एक UIScrollView में subviews (View Controller's views के रूप में subviews सटीक होना करने के लिए), viewWillDisappear बुलाया प्राप्त करेंगे जब आप ढेर पर एक और दृश्य नियंत्रक धक्का। हालांकि, जब दृश्य नियंत्रक पॉप किया जाता है, viewWillAppear कॉल नहीं किया जाता है। इन तरीकों को कभी भी आईओएस 4 में UIScrollView उप-दृश्यों में नहीं बुलाया गया था।

यह मेरे लिए अजीब व्यवहार है। युगल कि इस तथ्य के बावजूद कि क्या होना चाहिए, अगर आप आईओएस 4 में होने पर भरोसा कर सकते हैं, तो यह आईओएस 5 में अलग-अलग काम नहीं कर रहा है। ज्यादातर समय, मुझे नहीं पता कि किस विशेष उदाहरण में प्रत्येक को बुलाया जाता है , मैं आमतौर पर परीक्षण और त्रुटि करता हूं क्योंकि मैं जोन कोडिंग में हूं। अगर यह जिस तरह से काम करता है, मैं आगे बढ़ता हूं। फिर आईओएस 5 आता है और सब कुछ में एक मलबे गेंद फेंकता है।

मैं भी अनुभव किया है एक UINavigationController's दृश्य एक subview है जब, और एक ViewController नेविगेशन नियंत्रक ढेर पर धकेल दिया जाता है, viewWillAppear आईओएस 4 में कहा जाता हो जाता है कभी नहीं, लेकिन आईओएस 5. जाओ आंकड़े में कहा जाता हो जाता है।

+0

और जो भी नीचे मतदान किया गया है, कृपया इस परियोजना को आईओएस 4 और आईओएस 5 सिम्युलेटर के साथ आज़माएं, और मुझे बताएं कि आप दोनों सिम्स में ब्रेकपॉइंट प्राप्त करते हैं ... यह FirstViewController.m में एक NSLog कथन है। https://docs.google.com/open?id=0B5DJHlwe-2MTYjY0ZDMyMzgtY2Q3Zi00NzRlLWEyYmQtMGY0YjgzMDNjZDdk – Vinnie

2

मुझे एक ही समस्या थी। मैंने पाया कि viewWillAppear को मोडल को खारिज करने के बाद नहीं कहा जाता है लेकिन viewDidAppear है। तो बस इसके बजाय viewDidAppear आज़माएं।

+1

मोडल व्यू में मैंने 'presentingViewController.viewDidAppear (true)' जोड़ा और फिर यह काम किया लेकिन अपडेटयूआई() (निजी func) कॉल को जोड़ा। –

+0

यह काम नहीं करता है। और ऐसा लगता है कि यह कभी कामयाब नहीं रहा है –