एआरसी के संदर्भ में, यहाँ एक संभव समाधान है:
NSMutableArray* navArray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
[navArray replaceObjectAtIndex:[navArray count]-1 withObject:nextViewController];
[self.navigationController setViewControllers:navArray animated:YES];
आपको बता सकते हैं, यह कोड दृश्य आपको ढेर से दूर करने के लिए कोशिश कर रहे हैं (में हमेशा की तरह धक्का कोड की जगह "बी" आपके प्रश्न में)। लाइन 1 ने एनवी-कंट्रोलर स्टैक से NSMutableArray
में व्यू कंट्रोलर की सूची कॉपी की है। लाइन 2 अंतिम (शीर्ष) दृश्य को उस दृश्य के साथ बदलता है जिसे हम अगले ("सी") पर जाना चाहते हैं। लाइन 3 वास्तविक एनवी-कंट्रोलर का ढेर हमारे बदलते सरणी बनता है, और संक्रमण को सबसे ऊपर की वस्तु में एनिमेट करता है।
मैं एक वैकल्पिक तरीका here पाया और एआरसी के लिए यह अनुकूलित (बेशक आप जड़ ViewController में इस कोड का उपयोग नहीं कर सकते।):
UINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:someViewController animated:YES];
पहली पंक्ति की जरूरत है क्योंकि एक बार आप पॉप गए स्टैक से वर्तमान दृश्य, self.navigationController
nil
होगा और तीसरी पंक्ति काम नहीं करेगी। पिछली तरह की रेखाओं की समान संख्या, लेकिन इस तरह ढेर के साथ "मैन्युअल" fiddling के बजाय अंतर्निहित तरीकों के माध्यम से काम करता है।
एआरसी सक्षम के साथ ऐसा करने का कोई विचार है? कंपाइलर 'retain' – asdasd
@ ऑस्कर के उपयोग को अस्वीकार करता है, मेरा समाधान देखें, [नीचे] (http://stackoverflow.com/a/17328244/1431728)। – JohnK