2013-06-21 6 views
6

मैं UINavigationController का उपयोग कर रहा नियंत्रकों नेविगेशनUINavigationController popToViewController मुद्दा

सामान्य मामले में

RegistrationView से निपटने के लिए -> LoginView -> HomeView

HomeView & किसी अन्य अगले नियंत्रकों से होती है सेटिंग नामक एक स्क्रीन खोला गया है जिसमें लॉगआउट बटन है। इस बटन स्क्रीन के क्लिक पर सामान्य मामले में LoginView पर पॉप किया जाएगा।

- (IBAction)btnLogoutSelected:(id)sender 
{ 
    NSArray *navArr=self.navigationController.viewControllers; 
    for (UIViewController *nav in navArr) 
    { 
     if ([nav isKindOfClass:[LoginViewController class]]) 
     { 
      [self.navigationController popToViewController:nav animated:YES]; 
     } 
    } 
} 

एक बार उपयोगकर्ता पंजीकृत किया जाएगा & उपयोगकर्ता एक बार, यहाँ आवेदन स्वचालित लॉगइन कार्यक्षमता रहा है में प्रवेश किया गया है। तो उस समय LoginView नेविगेशन गिनती में नहीं होगा। तो इस परिदृश्य में कोड ऊपर काम नहीं कर रहा है। तो उस समय मैं LoginView पर जाने में सक्षम नहीं हूं। मुझे इस मुद्दे को हल करने में मदद चाहिए। अग्रिम धन्यवाद

उत्तर

8

मामले में आप नेविगेशन ढेर पर LoginViewController का एक उदाहरण की जरूरत नहीं है, बस इसे बनाने का प्रयास करें:

LoginViewController* loginController = [[LoginViewController alloc] init]; //use appropriate initWith... method 

तो फिर तुम UINavigationController के viewControllers संपत्ति का उपयोग कर सकते । आप वर्तमान दृश्य नियंत्रक को loginController के साथ प्रतिस्थापित कर सकते हैं, या दिए गए इंडेक्स पर loginController डालें और इसे पॉप करें।

NSMutableArray* newViewControllers = [self.navigationController.viewControllers mutableCopy]; 
[newViewControllers replaceObjectAtIndex:[newViewControllers indexOfObject:self] withObject:loginController]; 
[self.navigationController setViewControllers:newViewControllers animated:YES]; 
+2

मैं बस वही उत्तर पोस्ट करने वाला था :) +1 जॉन के लिए: आप 'पंजीकरण दृश्य नियंत्रक' की प्रतिलिपि बनाकर अपने स्वयं के 'व्यू कंट्रोलर' स्टैक बना सकते हैं और इसके ऊपर ताज़ा बनाया गया 'LoginViewController' जोड़ सकते हैं और फिर प्रस्तावित स्टैक एनिमेटेड सेट कर सकते हैं Michal –

+0

@ michal-ciuba द्वारा धन्यवाद, यह ठीक से काम कर रहा है और मुझे इसके पीछे अवधारणा मिली है। –

+0

@ bogdan-weidmann धन्यवाद। –

3

यह

if ([self.navigationController.viewControllers containsObject:objLogin]) { 
      [self.navigationController popToViewController:objLogin animated:TRUE]; 
     } 
     else { 
      [self.navigationController pushViewController:objLogin animated:TRUE]; 
     } 
+0

आप सही हो, यह अच्छी तरह से काम कर सकते हैं, लेकिन ऑटो लॉगिन परिदृश्य के समय में, LoginView नेविगेशन को नहीं जोड़ा जाएगा तो यह navigationController गिनती में नहीं है। –

+2

उस समय आपको लॉग इन व्यू कंट्रोलर को धक्का देना या प्रस्तुत करना होगा .. –

+0

आप बिल्कुल सही हैं, उस समय मुझे नेविगेशन के बारे में ज्यादा जानकारी नहीं थी। –

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