2012-02-10 9 views
67

को स्टोरीबोर्ड Segue मैं एक फ़ाइल/फ़ोल्डर सूची ड्रिल-डाउन करने के लिए एक तंत्र बनाने की कोशिश कर रहा हूँ। विचार एक ही फाइल सूची दृश्य नियंत्रक हर बार उपयोगकर्ता एक फ़ोल्डर का चयन करता है दिखाने के लिए, और एक फ़ाइल विवरण दृश्य नियंत्रक दिखाते हैं कि यदि वह/वह एक फ़ाइल का चयन करता है।देखें नियंत्रक से खुद को

enter image description here

:

अब तक, मैं फ़ाइल विवरण दृश्य नियंत्रक करने के लिए फ़ाइल सूची दृश्य नियंत्रक से एक segue, और फ़ाइल सूची तालिका दृश्य नियंत्रक करने के लिए फ़ाइल सूची तालिका दृश्य सेल से एक segue बनाया है

इस के साथ समस्या यह है कि जैसे ही उपयोगकर्ता सेल टैप करता के रूप में, segue क्रियान्वित किया जाता है। मैं तालिका दृश्य सेल से segue को हटा दें और अपने आप के लिए फ़ाइल सूची दृश्य नियंत्रक से एक बनाने के लिए करना चाहते हैं। इस तरह, जब उपयोगकर्ता ने सेल को टैप किया तो मैं प्रोग्रामिंग के दाएं सेगू को ट्रिगर कर सकता था।

तो, मेरे सवाल है: यह इंटरफ़ेस बिल्डर में खुद के लिए एक दृश्य नियंत्रक से एक segue बनाने के लिए संभव है?

+1

हां, एक्सकोड 5 का उपयोग करके आप कर सकते हैं। [पोस्ट देखें] (http://stackoverflow.com/questions/9226983/storyboard-segue-from-view-controller-to-itself/23436265#23436265)। –

+0

संपादक मेनू खोलें, 'दस्तावेज़ रूपरेखा दिखाएं' पर क्लिक करें, फिर सेल से आउटलाइन की फ़ाइल सूची 'व्यू कंट्रोलर' ऑब्जेक्ट पर दाएं-बटन-ड्रैग करें। –

उत्तर

25

मैं एक segue एक प्रेत बटन का उपयोग कर बनाने के लिए एक विधि विकसित की। मेरा मानना ​​है कि यह आपकी समस्या का समाधान करेगा। तुम मेरे जवाब here में इसके बारे में पढ़ सकते हैं। एक ही नियंत्रक को एक segue प्रदर्शन के

+4

यह मुझे सही रास्ते पर डाल दिया। मैंने "डॉक" पर एक बटन जोड़ा, और इसे फ़ाइल सूची दृश्य नियंत्रक से जोड़ा। अब मैं चाहता था कि segue प्रोग्रामेटिक रूप से कर सकते हैं। धन्यवाद! – Jorge

+1

मेरी इच्छा है कि एक स्व-सेग प्राप्त करने के लिए यह आवश्यक नहीं था, लेकिन यह काम करता है। – jogloran

+2

मुस्तफा का समाधान कम हैकी और सुंदर सीधा है। प्रेत बटन के साथ समान विचारों के लिए segues बनाना केवल आपके स्टोरीबोर्ड को गड़बड़ कर देगा। – strada

23

इसके बजाय, आप स्टोरीबोर्ड से एक दृश्य नियंत्रक (वही) का दृष्टांत कर सकते हैं, और फिर धक्का कि नेविगेशन नियंत्रक पर।

+0

मुझे प्रेत बटन समाधान पसंद है, मेरे सभी आगे के संक्रमण तैयार करने के माध्यम से जाएं ForSegue: याद रखने के बजाय यदि आईबी या कोड में कोई संक्रमण बनाया गया है। –

40

आप एक नेविगेशन नियंत्रक आप एनएवी ढेर में ViewController पुश करने के लिए की जरूरत है प्रयोग कर रहे हैं। इस उदाहरण में, मैं अपने स्टोरीबोर्ड आईडी सेटिंग में मेरी ViewController "वीडीआई" नाम दिया है।

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"]; 
[self.navigationController pushViewController:dest animated:YES]; 

आप navigationController ही अपने "वापस" इतिहास में जोड़ने रखने के लिए आप ऐसा है जैसे कि यह में जोड़ने से पहले ढेर पॉप कर सकते हैं नहीं करना चाहते हैं।

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"]; 
UINavigationController *navController = self.navigationController; 
[navController popViewControllerAnimated:NO]; 
[navController pushViewController:dest animated:YES]; 
+0

यह दोनों और @ टीजे/@ जॉर्ज विधियां काम करेंगे। मैं इस तरह से चला गया क्योंकि यह क्लीनर महसूस करता है। लाभ जो मैं अन्य विधि में देख सकता हूं वे हैं कि आप स्टोरीबोर्ड में अपने लूपिंग सेग्स देख सकते हैं, और आप अपने सभी नेविगेशन को "readyForSegue:" – siburb

+1

में पूरी तरह से काम कर सकते हैं! साथ ही, एक्सकोड में यह "स्टोरीबोर्ड आईडी" है कि वह इसे फिर से बनाने के लिए "वीडीआई" पर सेट है। – Nerrolken

13

आईओएस 6 में, वहाँ एक प्रेत बटन का उपयोग करने से a cleaner solution है। तुम अब भी दृश्य नियंत्रक करने के लिए तालिका सेल से segue परिभाषित करते हैं, और स्वचालित रूप से शुरू हो रहा segue रद्द करने के लिए इस पर देख सकते हैं:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    //storyboards should use segues and override prepareForSegue instead 
    //but here we need custom logic to determine which segue to use 
    id item = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    if (item meets condition) { 
     [self performSegueWithIdentifier:@"segue1" sender:self]; 
    } else { 
     [self performSegueWithIdentifier:@"segue2" sender:self]; 
    } 
} 

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    //ignore segue from cell since we we are calling manually in didSelectRowAtIndexPath 
    return (sender == self); 
} 
0

आशा इस मदद करता है।

मैंने पाया कि आप एक से अधिक प्रोटोटाइप कोशिकाओं बना सकते हैं।

से आप एक अलग दृश्य के लिए हर सेल (स्टोरीबोर्ड में) लिंक कर सकते हैं।

कुछ इस तरह:

NSString *CellIdentifier = @"Cell"; 
if (Condition2){ 
CellIdentifier = @"Cell2"; } 
if (Condition3){ 
CellIdentifier = @"Cell3"; } 
27

Xcode 5 का उपयोग करते हुए वहाँ एक बहुत सरल समाधान है।

  1. (ऊपर दाईं ओर स्थित सही तीर आइकन)
  2. तहत चक्र से
  3. खींचें अगले "ट्रिगर segues" आप देख "चयन" कनेक्शन इंस्पेक्टर स्टोरीबोर्ड
  4. ओपन में तालिका कक्ष पर क्लिक करें स्टोरीबोर्ड

में सेल में "चयन" करने के लिए यह है।

+2

यह दृष्टिकोण कोड की कोई पंक्ति के साथ एक आकर्षण की तरह काम करता है। –

+2

यह * * सही * xcode 5+ के लिए सही उत्तर है और इन दिनों आपको इसके लिए "शो" सेग का उपयोग करना चाहिए। – CupawnTae

+2

मेरे लिए काम नहीं कर रहा है, दृश्य नियंत्रक segue जोड़ने की अनुमति देने के लिए "नीला" नहीं बनता है। – db0

3

करने का तरीका यहां एक segue को परिभाषित करने या अपने स्वयं के पहचानकर्ता हार्डकोड बिना वर्तमान दृश्य नियंत्रक का एक और उदाहरण धक्का कर सकते हैं:

SameViewController *same = [self.storyboard instantiateViewControllerWithIdentifier: self.restorationIdentifier]; 
[self.navigationController pushViewController: same animated: YES]; 

तुम बस स्टोरीबोर्ड आईडी के बराबर हो जाए बहाली आईडी निर्धारित करने की आवश्यकता (वहाँ आईबी में इसके लिए एक चेकबॉक्स)।

Restoration ID

4

इंटरफ़ेस बिल्डर दृष्टिकोण: बस एक स्टोरीबोर्ड संदर्भ जो वापस पेश दृश्य नियंत्रक को संदर्भित करता है के लिए segue।

+1

में काम नहीं कर रहा प्रतीत होता है यदि आईबी में अन्य नेविगेशन के साथ अन्य नेविगेशन किया जाता है तो यह दृष्टिकोण सबसे अच्छा है! धन्यवाद! –

0

सही उत्तर एक स्टोरीबोर्ड संदर्भ का उपयोग करना है जो UIViewController का संदर्भ दे रहा है जिसे आप स्वयं से जोड़ना चाहते हैं और फिर उस पर segue इंगित करें।

enter image description here

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

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