2011-07-16 17 views
36

में रूटव्यू को प्रतिस्थापित करना मेरे पास एक नेविगेशन नियंत्रक के साथ एक प्रोजेक्ट है, जिसमें आईबी में पहला व्यू कंट्रोलर दिखाना है। प्रोजेक्ट बनाते समय यह सिर्फ डिफ़ॉल्ट पैटर्न है।आईफोन - नेविगेशन नियंत्रक

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

तो मैं कार्य करें:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    // Add the navigation controller's view to the window and display. 
    self.window.rootViewController = self.navigationController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

- (void) goNext { 

    [self.navigationController popViewControllerAnimated:NO]; 

    NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease]; 
    [self.navigationController pushViewController:nextWindow animated:NO]; 
} 

लेकिन वह काम नहीं करता, पहले ViewController poped नहीं है। और दूसरा एक बैक बटन के साथ तार्किक रूप से प्रदर्शित होता है।

मैं नेविगेशन प्रक्रिया की शुरुआत के रूप में दूसरे के साथ उस पहले दृश्य को प्रतिस्थापित करना चाहता हूं।

+1

तो ढेर के शीर्ष पर स्थित दृश्य नियंत्रक रूट दृश्य नियंत्रक, 'popViewControllerAnimated है:' विधि कुछ नहीं करता है। दूसरे शब्दों में, आप स्टैक पर अंतिम आइटम पॉप नहीं कर सकते हैं। आप इसके बजाय 'setViewControllers: एनिमेटेड:' विधि आज़मा सकते हैं। – albertamg

+0

क्या आप अपने रूटव्यू कंट्रोलर को xib में NextViewController में बदल नहीं सकते? – Deeps

उत्तर

78

से UINavigationController reference:

रूट दृश्य नियंत्रक उपयोग इस विधि को प्रतिस्थापित करने के

इस विधि (popViewControllerAnimated :) ढेर से निकाल देता है शीर्ष दृश्य नियंत्रक और नए शीर्ष बनाता है सक्रिय दृश्य नियंत्रक ढेर के। यदि स्टैक के शीर्ष पर नियंत्रक रूट व्यू कंट्रोलर है, तो यह विधि कुछ भी नहीं करता है। दूसरे शब्दों में, आप अंतिम आइटम को स्टैक पर पॉप नहीं कर सकते हैं।

इसके बजाय आप setViewControllers:animated: विधि का प्रयास कर सकते हैं।

- (void) goNext { 

    NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease]; 
    [self.navigationController setViewControllers:[NSArray arrayWithObject:detailViewController] animated:YES]; 
} 
+14

एक अधिक आधुनिक संस्करण: 'UIViewController * शेष भाग = [[UIStoryboard storyboardWithName: @" MainStoryboard "बंडल: शून्य] instantiateViewControllerWithIdentifier: @" MySceneId "];' ' self.navigationController.viewControllers = @ [शेष भाग];' – wbarksdale

17

यदि स्टैक के शीर्ष पर व्यू कंट्रोलर रूट व्यू कंट्रोलर है, तो पॉप व्यू कंट्रोलरएनिएटेड कुछ भी नहीं करता है। दूसरे शब्दों में, आप स्टैक पर अंतिम आइटम पॉप नहीं कर सकते हैं।

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated 
संबंधित मुद्दे