स्टोरीबोर्ड का उपयोग करना बहुत आसान है। आप बस कार्रवाई को "बाहर निकलें" पर खींचें। लेकिन मुझे इसे अपने कोड से कैसे कॉल करना चाहिए?
स्टोरीबोर्ड का उपयोग करना बहुत आसान है। आप बस कार्रवाई को "बाहर निकलें" पर खींचें। लेकिन मुझे इसे अपने कोड से कैसे कॉल करना चाहिए?
जवाबों:
डालने के लिए सेग का नाम डालें।
फिर, - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.
अपने segue की पहचान के साथ।
यहाँ उद्देश्य सी और स्विफ्ट के साथ पूरा जवाब दिया गया है:
1) IBAction
अपने डेस्टिनेशन व्यू कंट्रोलर (जहां आप सेगमेंट करना चाहते हैं ) में एक लेस्स्ड सेगमेंट बनाएं । कहीं भी कार्यान्वयन फ़ाइल में।
// Objective C
- (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {
}
// Swift
@IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {
}
2) स्रोत दृश्य नियंत्रक (जिस नियंत्रक से आप बहस कर रहे हैं) पर, बाहर निकलने के लिए "गतिविधि का नाम" से "+ खींचें। आपको पॉपअप में चरण 1 में बनाया गया खोलना लीग देखना चाहिए। (यदि आप इसे नहीं देखते हैं, तो चरण एक की समीक्षा करें)। खोलना बूचड़खाना चुनें: पॉपअप से, या जो कुछ भी आपने अपने स्रोत नियंत्रक को IBAction से जोड़ने के लिए अपनी विधि का नाम दिया है।
3) स्टोरीबोर्ड के स्रोत दृश्य नियंत्रक के दस्तावेज़ में सेग का चयन करें (यह नीचे के पास सूचीबद्ध किया जाएगा), और इसे एक पहचानकर्ता दें ।
4) स्रोत दृश्य नियंत्रक से इस विधि का उपयोग करके खोल देने वाले को कॉल करें , अपने आराम से नाम का प्रतिस्थापन करें।
// उद्देश्य सी
[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];
// स्विफ्ट
self.performSegueWithIdentifier("unwindToContainerVC", sender: self)
एनबी। स्रोत नियंत्रक पर किसी भी उजागर गुणों तक पहुंचने के लिए सिग्ड पैरामीटर पर sourceViewController संपत्ति का उपयोग करें। इसके अलावा, ध्यान दें कि फ्रेमवर्क स्रोत नियंत्रक को खारिज करता है। यदि आप इस बात की पुष्टि करना चाहते हैं कि एक लॉग संदेश के साथ स्रोत नियंत्रक के लिए एक डीललोक विधि जोड़ें, जिसे एक बार मार दिया गया हो तो उसे फायर करना चाहिए। यदि डीलॉक फायर नहीं करता है तो आपके पास एक चक्र हो सकता है।
(IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue
ctrl+drag
से ViewController
करने के लिए Exit
अविश्वसनीय रूप से मददगार था। धन्यवाद!
bradleygriffith
जवाब बहुत अच्छा था। मैंने 10 कदम उठाए और सरलीकरण के लिए एक स्क्रीनशॉट बनाया। यह Xcode 6 में एक स्क्रीनशॉट है।
unwind segue
साइडबार में चयन करें :[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
UIViewController
। फिर आपका समाधान काम करेगा
मैंने इस्तेमाल किया [self dismissViewControllerAnimated: YES completion: nil];
जो आपको कॉलिंग पर लौटाएगा ViewController
।
Unwind Segue पर Apple के तकनीकी नोट से पाठ का हवाला देते हुए: एक ऐसे सहज वाद को जोड़ने के लिए, जिसे केवल प्रोग्रामेटिक रूप से ट्रिगर किया जाएगा, दृश्य के कंट्रोल कंट्रोलर आइकन से उसके एक्ज़िट आइकन तक नियंत्रण, ड्रैग करें, फिर पॉपअप मेनू से नए segue के लिए एक सेक्शन को चुनें।
ऊपर विशाल चौधरी का जवाब मेरे लिए काम कर गया। मैं यह भी जोड़ना चाहूंगा कि मैन्युअल रूप से सीक को ट्रिगर करने के लिए:
[self performSegueWithIdentifier:@"mySegueName" sender:self];
व्यूकंट्रोलर के भीतर से आपको स्टोरीबोर्ड में ViewController के दृश्य के तहत और इसके अलावा आरएचएस पर गुणों के दृश्य में सिगर्ड सीग का चयन करना होगा यह सुनिश्चित करें कि इंडेंटिफायर क्षेत्र में वह नाम शामिल है जिसे आप कोड में उल्लेख कर रहे हैं ("mySegueName" ऊपर दिए गए उदाहरण में) )।
यदि आप इस चरण को छोड़ देते हैं, तो ऊपर की रेखा एक अपवाद फेंक देगी जो कि seque नाम ज्ञात नहीं है।
पीछे की ओर संगत समाधान जो ios6 से पहले के संस्करणों के लिए काम करेगा, जो इच्छुक हैं:
- (void)unwindToViewControllerOfClass:(Class)vcClass animated:(BOOL)animated {
for (int i=self.navigationController.viewControllers.count - 1; i >= 0; i--) {
UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:i];
if ([vc isKindOfClass:vcClass]) {
[self.navigationController popToViewController:vc animated:animated];
return;
}
}
}
स्विफ्ट 4 :
1. नियंत्रक के अंदर एक @IBAction बनाएं, जिसे आप खोलना चाहते हैं:
@IBAction func unwindToVC(segue: UIStoryboardSegue) {
}
2. स्टोरीबोर्ड में, उस कंट्रोलर से जिसे आप setrl + से सेगमेंट (खोलना) चाहते हैं, कंट्रोलर साइन से एक्ज़िट साइन से बाहर निकलें और आपके द्वारा पहले बनाई गई विधि का चुनाव करें:
3. अब आप देख सकते हैं कि दस्तावेज़ की रूपरेखा में आपके पास शीर्षक "अनविंड सेग ...." के साथ नई पंक्ति है। अब आपको इस लाइन पर क्लिक करना चाहिए और पहचानकर्ता को सेट करने के लिए विशेषता निरीक्षक को खोलना चाहिए (मेरे मामले में shrSegueIdentifier )।
4. आप लगभग पूरा कर चुके हैं! अब आपको व्यू कंट्रोलर खोलने की आवश्यकता है जिससे आप कुछ ऐसी विधि बना सकते हैं, जो कुछ विधि का निर्माण करेगी। उदाहरण के लिए आप बटन जोड़ सकते हैं, इसे @IBAction के साथ कोड से जोड़ सकते हैं , उसके बाद इस IBAction में perfromSegue (withIdentifier: भेजने वाला :) विधि जोड़ें:
@IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
}
तो आपको बस इतना ही करना है!
वीसी के साथ ऐसा करने की सोच रखने वालों के लिए स्टोरीबोर्ड के माध्यम से सेट अप नहीं किया जाता है (जो इस सवाल को "प्रोग्रामेटिकली" + "लेसर सेग") से खोजते हैं।
यह देखते हुए कि आप प्रोग्राम को व्यवस्थित रूप से खोल नहीं सकते, सरलतम प्रोग्रामेटिक सॉल्यूशन कॉल करना है:
navigationController?.popToRootViewController(animated: true)
जो स्टैक पर सभी व्यू कंट्रोलर्स को आपके रूट व्यू कंट्रोलर में वापस पॉप कर देगा।
नेविगेशन स्टैक से केवल सबसे ऊपरी दृश्य नियंत्रक पॉप करने के लिए, उपयोग करें:
navigationController?.popViewController(animated: true)
FYI करें: @ Vadim के जवाब के लिए एक मैनुअल कंट्रोलर के साथ काम करने के लिए एक व्यू कंट्रोलर के भीतर से सीक्वेंस एक्शन बुलाया जाता है जिसे आपको कमांड में रखना होगा:
[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];
ओवरराइड वर्ग विधि के अंदर viewDidAppear इसलिए की तरह:
-(void) viewDidAppear:(BOOL) animated
{
[super viewDidAppear: animated];
[self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}
यदि आप इसे ViewDidLoad या viewWillAppear जैसे अन्य ViewController तरीकों में रखते हैं तो इसे अनदेखा कर दिया जाएगा।
performSegueWithIdentfier
ठीक यही करता है: एक ViewController से दूसरे करने के लिए