संक्षेप में
एक आकस्मिक सेग (जिसे कभी-कभी एक्जिट सेग कहा जाता है ) का उपयोग पुश, मोडल या पॉपओवर सेगमेंट के माध्यम से वापस नेविगेट करने के लिए किया जा सकता है (जैसे कि यदि आप नेविगेशन बार से नेविगेशन आइटम को पॉपप करते हैं, तो पॉपओवर बंद कर दिया है या सामान्य रूप से प्रस्तुत दृश्य नियंत्रक को खारिज कर दिया है)। उसके शीर्ष पर आप वास्तव में केवल एक ही नहीं बल्कि पुश / मोडल / पॉपओवर सेगमेंट की श्रृंखला के माध्यम से खोल सकते हैं, उदाहरण के लिए एक एकल कार्रवाई के साथ अपने नेविगेशन पदानुक्रम में "कई कदम पीछे हटें"।
जब आप एक आराम से बहस करते हैं, तो आपको एक कार्रवाई निर्दिष्ट करने की आवश्यकता होती है, जो उस दृश्य नियंत्रक की एक क्रिया विधि है जिसे आप खोलना चाहते हैं।
उद्देश्य सी:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
स्विफ्ट:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
इस क्रिया विधि का नाम तब उपयोग किया जाता है जब आप स्टोरीबोर्ड में खोलना लीग बनाते हैं। इसके अलावा, इस विधि को सिंघम लीग के प्रदर्शन से ठीक पहले कहा जाता है। आप पास किए गए UIStoryboardSegue
पैरामीटर से स्रोत व्यू कंट्रोलर को उस व्यू कंट्रोलर से बातचीत करने के लिए प्राप्त कर सकते हैं जिसने सीग की पहल की है (जैसे कि मोडल व्यू कंट्रोलर के संपत्ति मान प्राप्त करने के लिए)। इस संबंध में, विधि की विधि के समान कार्य prepareForSegue:
है UIViewController
।
iOS 8 अपडेट: Unwind सेगेट्स iOS 8 के अनुकूली सेगमेंट के साथ भी काम करते हैं, जैसे कि Show और Show Detail ।
एक उदाहरण
आइए एक नेविगेशन कंट्रोलर और तीन चाइल्ड व्यू कंट्रोलर्स के साथ एक स्टोरीबोर्ड रखें:
ग्रीन व्यू कंट्रोलर से आप रेड व्यू कंट्रोलर के पास (वापस नेविगेट) कर सकते हैं। ब्लू से आप ग्रीन या रेड से ग्रीन के माध्यम से खोल सकते हैं। अनइंडिंग को सक्षम करने के लिए आपको विशेष एक्शन विधियों को रेड और ग्रीन में जोड़ना होगा, जैसे कि रेड में एक्शन विधि है:
उद्देश्य सी:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
स्विफ्ट:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
एक्शन मेथड जोड़े जाने के बाद, आप स्टोरीबोर्ड में दिए गए सीग को एक्ज़िट आइकन पर कंट्रोल-ड्रैग करके परिभाषित कर सकते हैं। जब हम बटन दबाते हैं तो हम ग्रीन से रेड को खोलना चाहते हैं:
आपको उस क्रिया का चयन करना होगा जिसे उस दृश्य नियंत्रक में परिभाषित किया गया है जिसे आप निम्न करना चाहते हैं:
आप रेड से ब्लू (जो कि नेविगेशन स्टैक में "दो कदम दूर" है) को खोल सकते हैं। कुंजी सही खोलना कार्रवाई का चयन कर रही है।
आराम से किए जाने वाले वाद-विवाद को निष्पादित करने से पहले, क्रिया विधि को कहा जाता है। उदाहरण में मैंने ग्रीन और ब्लू दोनों से रेड के लिए एक आराम से बहस को परिभाषित किया। हम UIStoryboardSegue पैरामीटर के माध्यम से एक्शन विधि में खोल के स्रोत तक पहुँच सकते हैं:
उद्देश्य सी:
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
UIViewController* sourceViewController = unwindSegue.sourceViewController;
if ([sourceViewController isKindOfClass:[BlueViewController class]])
{
NSLog(@"Coming from BLUE!");
}
else if ([sourceViewController isKindOfClass:[GreenViewController class]])
{
NSLog(@"Coming from GREEN!");
}
}
स्विफ्ट:
@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
println("Coming from BLUE")
}
else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
println("Coming from RED")
}
}
अनवाइंडिंग पुश / मोडल सेगमेंट के संयोजन के माध्यम से भी काम करता है। उदाहरण के लिए, यदि मैंने मोडल सेग के साथ एक और येलो व्यू कंट्रोलर जोड़ा है, तो हम येलो से एक ही चरण में रेड में वापस आ सकते हैं:
कोड से अवांछित
जब आप किसी व्यू कंट्रोलर के एग्जिट सिंबल पर किसी चीज को कंट्रोल-ड्रैग करके एक लेग सेग को परिभाषित करते हैं, तो डॉक्यूमेंट आउटलाइन में एक नया सेगमेंट दिखाई देता है:
बहस का चयन करना और गुण निरीक्षक के पास जाने से "पहचानकर्ता" संपत्ति का पता चलता है। अपने सेगमेंट को एक विशिष्ट पहचानकर्ता देने के लिए इसका उपयोग करें:
इसके बाद, किसी अन्य सेग्मेंट की तरह ही, इस लीग को लीग से अलग किया जा सकता है:
उद्देश्य सी:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
स्विफ्ट:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
याpopViewControllerAnimated:
एक ही चीज़ को प्राप्त नहीं कर सकते हैं ?