2013-08-19 12 views
25

क्या यह जानने के लिए आईओएस 6 में संभव है कि UIStoryboardSegue ने अपना संक्रमण कब समाप्त कर दिया है? जब मैं नेविगेशन नियंत्रक पर UIViewController को धक्का देने के लिए UIButton से UIStoryboardSegue जोड़ता हूं, तो मैं पुश-संक्रमण समाप्त होने के बाद कुछ करना चाहता हूं।एक सेग्यू के बाद कुछ कोड निष्पादित करने के लिए कैसे किया जाता है?

उत्तर

19

आप UINavigationControllerDelegate प्रोटोकॉल का उपयोग कर सकते हैं और उसके बाद निर्धारित करें:

– navigationController:didShowViewController:animated: 
+0

की शुरुआत में होता है जैसा कि मैंने अपेक्षा की उतनी खराब नहीं थी। 'self.navigationController = self;' और उस विधि को जोड़ें। मैंने सेग्यू आईडी के आधार पर नियंत्रकों को स्थानीय चर में सहेजा और फिर उन मानों को पारित 'व्यू कंट्रोलर' से तुलना करें। –

+7

यह पुश सेग्स के लिए काम करेगा जहां मूल दृश्य नियंत्रक के पास नेविगेशन नियंत्रक है, लेकिन मोडल सेग के मामले में क्या करना है? – Drux

+1

मैंने लेवी से कस्टम सेगु उत्तर का उपयोग किया और यहां 'उदाहरण' की तरह उदाहरण दिया: http://stackoverflow.com/a/23778394/586489 यह काफी अच्छी तरह से काम करता है, मुझे पता है कि पुश कब पूरा हो गया है और segues का उपयोग कर सकते हैं। –

14

यदि आप viewDidAppear: विधि का उपयोग नहीं करना चाहते हैं, तो आप कस्टम सेगू बना सकते हैं। perform विधि में आप संक्रमण के लिए एनीमेशन का उपयोग करेंगे, और इसमें पूर्णता ब्लॉक हो सकता है। एनीमेशन पूर्ण होने के बाद आप वहां कोड जोड़ सकते हैं।

+0

तो स्टोरीबोर्ड में मानक ड्रैग-एंड-ड्रॉप सेग्यू के साथ यह संभव नहीं है? – hakonbogen

+2

यह है कि आप इसे कैसे बनाते हैं, लेकिन आपको 'UIStoryboardSegue' को उप-वर्ग करना होगा और इसमें' प्रदर्शन 'विधि लागू करना होगा। उसके बाद, 'स्टोरीबोर्ड' में आपने सीगू की कक्षा को उस समय तक सेट किया है जिसे आपने अभी बनाया है। – Levi

-9

आप उपयोग कर सकते हैं - (शून्य) prepareForSegue: (UIStoryboardSegue *) segue इस: (आईडी) इस

ठीक पहले एक segue स्रोत UIViewController में किया जाता है इस विधि बुलाया जाएगा। यदि आप गंतव्य UIViewController में कुछ कोड करना चाहते हैं तो आप segue का गंतव्य व्यू कंट्रोलर प्राप्त कर सकते हैं।

आप इस कोड को व्यूडेड व्यू कंट्रोलर में viewdidAppear में भी जोड़ सकते हैं।

-9

आप फॉरसेग्यू विधि तैयार करने में गंतव्य UIViewController की विधि को कॉल कर सकते हैं।

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"prepareForSegue: %@", segue.identifier); 

    if ([segue.identifier isEqualToString:@"Happy"]) { 
     [segue.destinationViewController setHappiness:100]; 
    } else if ([segue.identifier isEqualToString:@"Sad"]) { 
     [segue.destinationViewController setHappiness:0]; 
    } 
} 

यहां सेट हैप्पीनेस विधि गंतव्य नियंत्रक का है और यहां 100 पास हो रहा है। ताकि आप गंतव्य नियंत्रक में एक विधि लिख सकते हैं और इसे यहाँ कॉल कर सकते हैं

+3

यह वास्तव में संकेत नहीं दे रहा है कि वास्तविक सीगू पूर्ण होने पर - यह segue – Sam

7

स्विफ्ट में, एक UIViewController उपवर्ग से आप UINavigationController उदाहरण प्राप्त कर सकते हैं और सेट जैसा कि दिखाया गया है, segues के पूरा होने के बारे में सूचित करने के लिए प्रतिनिधि। Segues को ट्रैक करने के लिए एक और तार्किक स्थान AppDelegate हो सकता है।

एक दृश्य नियंत्रक से यह कर का उदाहरण (छोटे के लिए वीसी):

class MyViewControllerSubclass : UIViewController, UINavigationControllerDelegate { 

    func viewDidLoad() { 
     self.navigationController.delegate = self 
    } 

    func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) { 
     println("Did show VC: \(viewController)") 
    } 
} 

लेकिन वह केवल आपको पता चलता है जब कुलपति को segue पूरा हो गया है, के रूप में viewWillAppear() या viewDidAppear() कुलपति में प्रतिनिधि तरीकों होगा प्रस्तुत किया जा रहा है; हालांकि, वे इस बारे में सूचित नहीं करते हैं कि लक्ष्य वीसी un - प्रस्तुत किया गया है।

वीसी में आप ट्रैकिंग कर रहे हैं, आप यह पता लगाने के लिए निम्नलिखित जोड़ सकते हैं कि वीसी (और इसकी मेमोरी) को हटा दिया गया है, या viewWillDisappear() विधि को ओवरराइड करें।

deinit { 
    println(__FUNCTION__, "\(self)") 
} 
संबंधित मुद्दे

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