2013-09-22 4 views
42

मुझे कुछ जानने के लिए कुछ 'सशर्त' रीडायरेक्ट/सेगू बनाने के बारे में जानने की आवश्यकता है। उदाहरण के लिए:स्टोरीबोर्ड का उपयोग कर सशर्त सेग्यू

यदि उपयोगकर्ता अभी तक लॉगिन नहीं किया गया है, तो लॉगिन फ़ॉर्म के साथ एक दृश्य दिखाई देता है। लेकिन अगर उपयोगकर्ता पहले से लॉग इन है, तो वे अपना प्रोफाइल व्यू देखेंगे।

स्टोरीबोर्ड का उपयोग कर सशर्त सेगू कैसे बनाएं?

आप

उत्तर

68

सशर्त सेग के लिए, सामान्य रूप से एक बटन से एक सेग्यू शुरू न करें। इसके बजाय इस बात का निम्न चरणों का उपयोग:

  1. अपने storyboad में, गंतव्य दृश्य नियंत्रक से स्रोत दृश्य नियंत्रक से सीधे एक segue शुरू करते हैं। ऐसा करने के लिए, आप मुख्य कैनवास क्षेत्र पर गंतव्य दृश्य नियंत्रक के दृश्य के नीचे बस पर अपने स्रोत दृश्य नियंत्रक के आइकन को खींच सकते हैं। बस याद रखें कि आपको दो दृश्य नियंत्रकों को सीधे कनेक्ट करना है, न कि किसी भी नियंत्रण के साथ।

  2. इस सेग्यू के लिए एक उपयुक्त segue पहचानकर्ता दर्ज करें। उदाहरण के लिए कहते हैं कि "conditionSegue"

  3. अब, अपने स्रोत दृश्य नियंत्रक के मीटर फ़ाइल में अपनी हालत करते हैं और इस तरह "स्व" पर -performSegueWithIdentifier:sender: विधि कॉल:

    -(void)loadDestinationVC{ 
        if(condition == YES){ 
    
         [self performSegueWithIdentifier:@"conditionSegue" sender:nil]; 
        } 
    } 
    

मुझे आशा है कि मैं इसे बनाया स्पष्ट।

+0

यह तेरा मेरे लिए काम किया, मैं एक UITableViewCell से एक conditionall segue किया था, क्योंकि कुछ कोशिकाओं कुछ दृश्य और अन्य अन्य कोशिकाओं को दिखाने के लिए है ... बात है के लिए यह सहायता जब मैं पुश सेगू से वापस आ जाता हूं तो यह फोकस खो देता है और दृश्य को रीसेट कर देता है, यह उस सेल पर वापस नहीं आया जिसने कार्रवाई शुरू की। मेरे पास शीर्ष पर सेगमेंट नियंत्रण वाला एक टेबलव्यू है जो 2 डेटा स्रोतों के बीच बदलता है। यदि मैं सेगमेंट से वापस आने पर विभाजित नियंत्रण की दूसरी अनुक्रमणिका के साथ एक यूटेबलव्यूसेल से सीगू करता हूं, तो जब मैं सेग्यू से वापस आ जाता हूं, तो यह सेगमेंट नियंत्रण पर 1rst इंडेक्स के साथ दृश्य शुरू करता है ... – fguespe

+0

@fguespe क्या आप समस्या का हल पूछ रहे हैं या यह एक सामान्य टिप्पणी है। –

+0

हाँ, मुझे एक समाधान की आवश्यकता है, लेकिन मैं थोड़ा सा उन्नत हूं और मैं समझता हूं कि सशर्त सिगू की गलती नहीं है। सामान्य segues के लिए होता है। समस्या सेगमेंट नियंत्रण है जो सूचकांक को वापस आने पर देखता है लेकिन यह पहला सेगमेंट डेटा दिखाता है। – fguespe

3

आप segues सीधे एक और (या अन्य) के लिए एक नियंत्रक से बना है, और उन्हें पहचानकर्ता दे धन्यवाद। कोड में आप अपनी शर्तों के आधार पर सेग के बीच चयन करते हैं, और कॉल करेंगेगुइथइडिएंटिफायर: प्रेषक:।

14

मैं एक बेहतर दृष्टिकोण लगता है कि आप बटन से segues उपयोग करने के लिए इस का उपयोग किया जाएगा चाहते हैं:

पहले एक बटन बनाने और इसे एक और दृश्य से कनेक्ट करने के एक segue उपयोग करते हैं, यह एक नाम देना segue

फिर अपने मीटर फ़ाइल में इस विधि का उपयोग

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    if ([identifier isEqualToString:@"SegueName"]) { 
     //Check if should make the segue 
     //if not do something 
     [self doSomething]; 
     //and return NO; 
     return NO; 
    } 
    return YES; 
    } 
+0

यदि आप एक्सकोड 6 का उपयोग कर रहे हैं और इस बात के बारे में अनिश्चित हैं कि किस प्रकार के सेग का उपयोग करना है, तो आप "एक्शन सेग" के तहत "शो" सेग का उपयोग कर सकते हैं। साथ ही, एसईजी को पहचानकर्ता (नाम) देने के लिए, इसे स्टोरीबोर्ड में चुनें और "विशेषताएँ" फ़ील्ड में "पहचानकर्ता" फ़ील्ड में दाईं ओर स्थित नाम का नाम दर्ज करें (दाईं तरफ) –

1

बनाएं ctrl गंतव्य के लिए तल पर दृश्य नियंत्रक आइकन से खींचकर "सामान्य" segue। यह segue किसी भी कार्रवाई से जुड़ा नहीं होगा। फिर, अपने कोड जहां कभी घटना अपने सशर्त कोड है कि आप segue ट्रिगर करना चाहते हैं उपयोग कर रहा है में, फोन:

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
6

स्विफ्ट में आप कर सकता है: रूप @Gaurav सिंह जवाब में सुझाव दिया

चरण 1: ViewControllerA से ViewControllerB पर एक सेग्यू डालें। Segue ViewControllerA से ही शुरू होना चाहिए, न कि किसी भी नियंत्रण (जैसे बटन) से।

चरण 2: स्टोरीबोर्ड में एक अद्वितीय पहचानकर्ता को segue दें। पूर्व: seageFromAtoB

चरण 3: आपके ViewControllerforA में।तेजी से लिखने:

if(condition == true) { 
    self.performSegueWithIdentifier("seageFromAtoB", sender: self) 
} 

आप कुछ अन्य Thread में कुछ कार्य कर रहे हैं तो performSegueWithIdentifier का उपयोग करके अपवाद फेंक कर सकते हैं।

आप इस त्रुटि मिलती है, तो आप का उपयोग करना चाहिए:

if(condition==true){ 
     NSOperationQueue.mainQueue().addOperationWithBlock { 
      self.performSegueWithIdentifier("seageFromAtoB", sender: self) 
     } 
} 

यह मुख्य Thread में segue पुनर्निर्देशन प्रदर्शन करेंगे।

आशा किसी स्विफ्ट विकल्प की तलाश में

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