2011-12-05 10 views
13

मैं एक स्टोरीबोर्ड आधारित आईफोन ऐप लिख रहा हूं और राज्य बहाली पर काम कर रहा हूं। आमतौर पर segues प्रदर्शन करते समय, मैं उन्हें एनिमेट करना चाहता हूं, लेकिन जब मैं नेविगेशन पदानुक्रम के कई स्तरों को बहाल कर रहा हूं, तो मैं केवल आखिरी सीगू को एनिमेट करना चाहता हूं। सेग के दो सेट सेट करने के अलावा- एक सेट जो सामान्य पुश सेग्यू का उपयोग करता है, और दूसरा जो एक कस्टम गैर-एनिमेटिंग पुश सेग्यू का उपयोग करता है-क्या मैं ऐसा करने का प्रयास कर रहा हूं?एनीमेशन के बिना पुश segue

उत्तर

14

एप्लिकेशन के सीगू या स्टोरीबोर्ड से स्वतंत्र रूप से व्यू कंट्रोलर स्टैक में हेरफेर करना संभव है।

आप इस तकनीक का उपयोग दृश्य नियंत्रकों के गहरे ढेर को पुनर्स्थापित करने के लिए कर सकते हैं, और शीर्ष दृश्य नियंत्रक को केवल एक ही सीगू को निष्पादित/एनिमेट कर सकते हैं। (आपको इस उद्देश्य के लिए एक विशिष्ट पुश सेगू बनाने की आवश्यकता होगी।)

उदाहरण के लिए, दो व्यू कंट्रोलर स्टैक को पुनर्स्थापित करने के लिए, आप निम्न कार्य कर सकते हैं। इस उदाहरण में, यह माना जाता है कि मौजूदा दृश्य नियंत्रक पर कुछ क्रियाएं राज्य पुनर्स्थापना की ओर ले जाती हैं, लेकिन आप इसे अपने ऐप प्रतिनिधि से आसानी से निष्पादित कर सकते हैं।

[self performSegueWithIdentifier:@"Page2Express" sender:self]; 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"Page2Express"]) 
    { 
     // Get any state data you need to from Core Data 
     CoreDataType *valuePulledFromCoreData = // ... 

     // Set up the page 2 view controller as you normally would 
     Page2ViewController *page2ViewController = segue.destinationViewController; 
     page2ViewController.instanceVariable = valuePulledFromCoreData; 

     // Create a loose, page 1 view controller and set it up as required 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
     Page1ViewController *page1ViewController = [storyboard instantiateViewControllerWithIdentifier:@"Page1ViewController"]; // Ensure you have this identifier set up in your storyboard 
     page1ViewController.instanceVariable = valuePulledFromCoreData; 

     // Add the page 1 view controller to the top of the navigation stack (to be later obscured in the segue by the page 2 view controller) 
     NSMutableArray *viewControllers = [[self navigationController].viewControllers mutableCopy]; 
     [viewControllers addObject:page1ViewController]; 
     [self navigationController].viewControllers = viewControllers; 
    } 
} 

यदि, इसके बजाय, आप कोई एनिमेशन नहीं करना पसंद करते हैं, तो यह अभी भी आसान है। आप - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions और - (void)applicationWillEnterForeground:(UIApplication *)application से व्यू कंट्रोलर स्टैक (और किसी भी सेग का उपयोग किए बिना) को मैनिपुलेट करके पूरी तरह से राज्य को पुनर्स्थापित कर सकते हैं।

किसी भी तरह से निर्बाध रूप से काम करेगा और आपके मौजूदा स्टोरीबोर्ड और सीगों के साथ मिलकर काम करेगा।

+0

बस ब्याज से बाहर, क्या कोई कारण है कि आप 'pushViewController: एनिमेटेड: 'का उपयोग करने के बजाय' viewControllers 'सरणी में हेरफेर करते हैं? –

+4

'pushViewController: एनिमेटेड:' न केवल स्टैक पर व्यू कंट्रोलर जोड़ता है - यह दृश्य नियंत्रक को दिखाने के लिए दृश्य को भी रीफ्रेश करता है। इस मामले में, हम 'पेज 1 व्यू कंट्रोलर' को भी संक्षेप में नहीं देखना चाहते हैं, इसलिए हमें इसे सीधे ढेर में जोड़ना होगा। –

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