2015-02-13 3 views
8

यहां परिदृश्य है:मैं स्टोरीबोर्ड पर पहले व्यू कंट्रोलर पर कैसे लौट सकता हूं?

मेरी स्टोरीबोर्ड में पहला दृश्य एक लॉगिन दृश्य है। यह एक UIViewController है। जब उपयोगकर्ता लॉग इन होता है, तो यह उस होम व्यू को दिखाता है जो नेविगेशन नियंत्रक में एम्बेड किया गया है। मैं एक लॉग आउट कार्यक्षमता जोड़ रहा हूं जो मुझे स्टोरीबोर्ड में पहले दृश्य में वापस ले जाना चाहिए जो लॉगिन दृश्य है। मैं उसको कैसे करू?

यहां लॉग इन करें दृश्य दिखा स्टोरीबोर्ड की एक छवि है -> नेविगेशन नियंत्रक -> घर दृश्य Storyboard

यह मेरा कार्यान्वयन अब तक है। लॉग आउट एक्शन में, मैं सत्र साफ़ करता हूं, और रूट व्यू कंट्रोलर पर पॉप करता हूं। यह काम नहीं करता है क्योंकि मैं अभी भी घर के दृश्य पर फंस गया हूं क्योंकि यह नेविगेशन नियंत्रक का मूल दृश्य नियंत्रक है। हालांकि, अगर मैं ऐप को पुनरारंभ करता हूं, तो उपयोगकर्ता लॉग आउट होता है और मुझे लॉगिन दृश्य के साथ छोड़ दिया जाता है।

कोड:

[self.navigationController popToRootViewControllerAnimated:NO]; 

    // Set at beginning of storyboard 
    UIStoryboard *mystoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    app.loginViewController = [mystoryboard instantiateViewControllerWithIdentifier:@"loginViewController"]; 
+2

[एक खोलना segue का प्रयोग करें] (http://stackoverflow.com/q/12561735/335858)। – dasblinkenlight

+0

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

+0

मेरी टिप्पणी एक पूरा जवाब नहीं है, यह केवल एक संकेत है। आपके पास एक [बेहतर उत्तर] है (http://stackoverflow.com/a/28492711/335858) जो एक ही विचार का उपयोग करता है। – dasblinkenlight

उत्तर

6

इसके लिए सीगों को खोलें।

अपने LoginViewController में, इस हस्ताक्षर

- (IBAction)unwindToLoginViewController:(UIStoryboardSegue*)segue

आपके विचार नियंत्रक विंडो के शीर्ष पर बाहर निकलें बटन करने के लिए अपने प्रस्थान करें बटन से अपने HomeViewController और नियंत्रण खींचें पर जाएं के साथ एक प्रणाली की घोषणा (नीचे स्क्रीनशॉट देखें), फिर unwindToLoginViewController segue का चयन करें। बस!

enter image description here

+1

मुझे यह काम करने के लिए मिला लेकिन मैं काम कर रहा हूं कि अगर आप एक यूआईएक्शनशीट बटन पर सेग्यू एक्शन से मेल खाना चाहते हैं (यानी कोई लॉगआउट बटन नहीं है या बटन प्रोग्रामेटिक रूप से जेनरेट किया गया है) – okysabeni

+1

नियंत्रक से कनेक्ट करें (तीनों का पहला आइकन जहां बाहर निकलें segue आइकन है) बाहर निकलने के आइकन पर। अवांछित segue एक नाम दें और जब आप इसे ट्रिगर करना चाहते हैं तो बस 'performSegueWithIdentifier: प्रेषक:' विधि का उपयोग करें। – Rog

2

यू, navigationController बीच navigationController.viewControllers.Get सभी देखें नियंत्रकों का उपयोग करके पॉप यह पहचान करके pop.If यू HomeView

को LoginView से segue धकेल दिया
if([self.navigationController.viewControllers[0] isKindOfClass:[LoginViewController class]]) 
    { 
     [self.navigationController popToViewController:self.navigationController.viewControllers[0] animated:YES]; 
    } 
कर सकते हैं

उम्मीद है कि यह आपकी मदद करता है ...

+0

नहीं। लॉगिन दृश्य एक नेविगेशन नियंत्रक में एम्बेडेड नहीं है। पॉप करने के लिए कुछ भी नहीं बचा है। – okysabeni

1

इस उत्तर का प्रयास करें। सबसे पहले आप एक नेविगेशन नियंत्रक बनाते हैं। इसे "प्रारंभिक देखें नियंत्रक" बनाओ। इसके बाद लॉगिन व्यू कंट्रोलर को रूट व्यू कंट्रोलर के रूप में कनेक्ट करें और फेसबुक बटन एक्शन के साथ होम कंट्रोलर कनेक्ट करें।

नेविगेशन नियंत्रक -> लॉग इन नियंत्रक -> होम नियंत्रक

आपका स्टोरीबोर्ड इस

enter image description here

उसके बाद की तरह लग रही है जब आप HomeViewController से लॉगआउट तो बस इस विधि जोड़ने है:

-(IBAction)logOut_Action:(id)sender 
    { 
    [self.navigationController popViewControllerAnimated:YES]; 
    } 

इसकी कामकाजी ठीक है। कृपया इस तरह कार्यान्वित करें और अगर आपको कोई समस्या आती है तो मुझे बताएं। :)

+0

@Yko: यह काम कर रहा है या नहीं? –

+0

अरे, मैंने इसे समझ लिया लेकिन जिस तरह से आपने इसे नहीं किया। मैं लॉगिन दृश्य पर दिखाई देने वाले नेविगेशन नियंत्रक बार नहीं चाहता हूं। हालांकि उत्तर के लिए धन्यवाद! – okysabeni

+0

ठीक है, आप नेविगेशन बार छुपा सकते हैं। स्टोरीबोर्ड में "टॉप बार" सेट करें। –

1

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

[self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil]; 
संबंधित मुद्दे