2012-03-13 21 views
10

के साथ आईओएस 5 ऐप में एक UIViewController को सशर्त रूप से छोड़कर हमारे आईओएस एप्लिकेशन में तीन UIViewController एस के साथ एक दूसरे के साथ, हम मध्य स्थिति को किसी शर्त के आधार पर छोड़ना चाहते हैं और सीधे पहले से तीसरे तक जाना चाहते हैं। हालांकि, उपयोगकर्ता को तीसरे नियंत्रक पर "बैक" बटन के माध्यम से दूसरे में वापस आने में सक्षम होना चाहिए।UINavigatonController

मैं viewDidLoad, viewWillAppear से [self performSegueWithIdentifier:@"segueId" sender:sender]; कोशिश की, लेकिन के रूप में डीबग लॉग ने संकेत दिया इस नेविगेशन पट्टी भ्रष्ट। viewDidAppear से इस कोड को कॉल करना ठीक काम करता है, लेकिन फिर दूसरा दृश्य पहले ही प्रदर्शित होता है, जो मैं पहले स्थान से बचने की कोशिश कर रहा था।

मैंने [self.navigationController pushViewController:vc animated:NO]; भी कोशिश की लेकिन परिणाम इसी प्रकार दूषित नौसेना बार है, भले ही इस बार डीबग लॉग में ऐसी प्रविष्टियां न हों।

ऐसा करने का समर्थित तरीका क्या होगा (यदि यह संभव है तो)?

लक्ष्य आईओएस 5.1 के साथ आईफोन 4 है, और देव पर्यावरण एक्सकोड 4.3 है।

उत्तर

8

मैं एक ऐप में निम्न कोड का उपयोग करता हूं। बिल्कुल अपेक्षित काम करता है।

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    SecondViewController *secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
    if (indexPath.row == 0) { 
     // skip second vc 
     ThirdViewController *thirdVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ThirdViewControllerViewController"]; 
     [self.navigationController pushViewController:secondVC animated:NO]; 
     [self.navigationController pushViewController:thirdVC animated:YES]; 
    } 
    else { 
     // push second vc 
     [self.navigationController pushViewController:secondVC animated:YES]; 
    } 
} 
+0

प्रतिक्रिया देने के लिए बहुत बहुत धन्यवाद। इसे इस तरह कार्यान्वित करने में सक्षम होने के लिए, ऐसा लगता है कि नियंत्रकों को पिछले किसी भी डेटा की आवश्यकता नहीं होनी चाहिए। अभी हमारे ऐप में प्रत्येक नियंत्रक 'readyForSegue' के दौरान बाद के नियंत्रक के लिए प्रासंगिक डेटा (उपयोगकर्ता चयन के आधार पर) तैयार करता है। यही कारण है कि मैं ऐसा कुछ ढूंढ रहा था जो मुझे "छोड़ने" की अनुमति देगा (यानी जैसे कि एक सीगू स्वचालित रूप से किया जाता है)। आपने मुझे इसके बारे में सोचना एक विचार दिया। मुझे इस पर काम करने दें और देखें कि क्या मैं इस विचार को ऐप में शामिल कर सकता हूं। – alokoko

+0

कुछ शफल शामिल था लेकिन मुझे यह काम मिल गया। मैं अभी भी चाहता हूं कि किसी भी तरह से "छोड़ें" (शायद एक सेग्यू या किसी अन्य तरीके से) का एक तरीका था जो दिखाई देने से पहले एक ही नियंत्रक के भीतर काम करेगा। – alokoko

+0

एक विवरण जो मैं उल्लेख करना भूल गया था: छोड़ने के बाद तीसरे नियंत्रक पर बैक बटन दूसरे नियंत्रक के शीर्षक के बजाय "बैक" लेबल किया गया है क्योंकि यह सामान्य अनुक्रम के तहत होगा। क्या इसे मैन्युअल रूप से सेट किया जाना चाहिए? – alokoko

2

आप एक दृश्य नियंत्रक को छोड़ करना चाहते हैं तो आप सिर्फ UINavigationController setViewControllers:animated: कॉल कर सकते हैं यह आपूर्ति की सरणी में पिछले नियंत्रक से चेतन जाएगा, और उपयोगकर्ता है कि ढेर से बाहर "वापस" करने के लिए सक्षम हो जाएगा।

आप दृश्य नियंत्रकों की सरणी को किसी भी तरह से बना सकते हैं; शायद दृश्य नियंत्रकों की मौजूदा सरणी से शुरू:

NSMutableArray* newViewControllers = [[navController.viewcontrollers mutablecopy] autorelease]; 

[newViewControllers addObject: ...]; 

[navController setViewControllers: newViewControllers animated: YES]; 
+0

धन्यवाद। जब यह गहराई से और/या अधिक जटिल स्थितियों में ढेर को संशोधित करने की आवश्यकता होती है तो यह उपयोगी होगा। अभी एक और पोस्टर द्वारा सुझाए गए अनुक्रम में दृश्य नियंत्रकों को दबाकर ठीक काम कर रहा है। – alokoko

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

  • कोई संबंधित समस्या नहीं^_^