প্রোগ্রামওয়ালি আনওয়াইন্ড সিগু কিভাবে করবেন?


307

স্টোরিবোর্ড ব্যবহার করা এটি খুব সহজ। আপনি কেবল অ্যাকশনটিকে "প্রস্থান" এ টানুন। তবে কীভাবে আমি আমার কোড থেকে কল করব?


33
আমি এটি একটি বৈধ প্রশ্ন মনে করি - আমি নিজে এটি ছিল। আপনি অ্যানওয়াইন্ড সেগু প্রোগ্রামিয়ালি সম্পাদন করতে পারেন ১. একটি ম্যানুয়াল সেগু তৈরি করে (ফাইলের মালিক থেকে প্রস্থান করতে সিটিটিএল-ড্রাগ), ২. আইবিতে এটি একটি নাম দিন, তারপরে ৩. আপনার কোডটিতে একটি সাধারণ-পারফর্মসেটগিথআইডেন্টিফায়ার: প্রেরক: করছেন।
ইয়াং মায়ার

6
আইএমও বন্ধ করা উচিত হয়নি। যে ব্যবহারকারীরা এই প্রশ্নটি বন্ধ করতে ভোট দিয়েছেন তা নিশ্চিতভাবে মনে হচ্ছে না যে ওজ-সি / কোকো টাচ ব্যাকগ্রাউন্ড রয়েছে।
এলজে উইলসন

ইয়াং: আপনি কীভাবে এটি একটি নাম দিন?
সরফাতা

আমি কেবল [স্ব-বরখাস্ত ভিউকন্ট্রোলার অ্যানিমেটেড: হ্যাঁ সমাপ্তি: শূন্য] ব্যবহার করি; প্রোগ্রামগতভাবে প্রস্থান করতে। আমি জানি না এটি একটি সঠিক উপায় বা না।
tangqiaoboy

1
সরফাতা: আপনি প্রথমে ভিউকন্ট্রোলার থেকে "প্রস্থান" তে সিটিআরএল-টেনে একটি "ম্যানুয়াল আনওয়াইন্ড সেগু" তৈরি করেন। তারপরে আপনি ডকুমেন্ট আউটলাইনে সেগ খুঁজে পাবেন।
হুগি

উত্তর:


283
  1. একটি ম্যানুয়াল ctrlসেগু তৈরি করুন ( ফাইলের মালিক থেকে প্রস্থান করার জন্য ছাড়ুন),
  2. এটিকে সবুজ EXIT বোতামের নীচে বাম নিয়ন্ত্রক মেনুতে চয়ন করুন।

এটিকে সবুজ EXIT বোতামের নীচে বাম নিয়ন্ত্রক মেনুতে চয়ন করুন

খুলে ফেলার জন্য সেগের নাম .োকান।

তারপরে, - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.আপনার সিগু দিয়ে সনাক্ত করুন।


25
1) "ফাইলের মালিক" - এটি কি পুরানো পরিভাষা নয়? এটি আমার পক্ষে ভিউ কন্ট্রোলার থেকে এর প্রস্থান আইকনে টেনে আনতে নিয়ন্ত্রণ করে। ২) যদিও এটি স্পষ্ট হওয়া উচিত, তবে এক্সকোড আইবিএક્શનের ইন্টারফেসে একটি ঘোষণার সন্ধান করছে যা একটি ইউআইএসটিরিবোর্ডসিউগ আর্গুমেন্ট গ্রহণ করে; ডাব্লুডাব্লুডিসি 2012 সেশনের 407 টকটিতে এটি উল্লেখ করা হয়নি এবং সেই কোডটি আটকানো হয়নি it এটি ছাড়া আমার প্রস্থান আইকনটি যখন এতে নিয়ন্ত্রণ-টেনে নিয়ে যায় তখন সক্রিয় হবে না। 3) এটি দুর্দান্ত শীতল যে আপনার বড় লাল তীরের শেষে, অ্যাকশন ক্ষেত্রে, আপনি "সেখানে যান" তীরটি আঘাত করতে পারেন!
tobinjim

71
আমার মতো, যে কেউ এই উত্তরটি বাস্তবায়িত করতে এখনও সমস্যায় পড়েছেন, আমি এই রেপোতে আরও পুঙ্খানুপুঙ্খ ওয়াকথথ এবং উদাহরণ রেখেছি : github.com/bradley/iOSUnwindSegueProggramatically (নিজেকে বিজ্ঞাপন দেওয়ার চেষ্টা করছি না, আমি কেবল মাথাটি প্রাচীরের বিপরীতে ঝাঁকিয়েছি এই সম্পর্কে কয়েক ঘন্টা এবং একটি কার্যকারী সেটআপ দেখে আমাকে সহায়তা করে))
ব্র্যাডলেগ্রিফিথ

3
@ ব্র্যাডলেগ্রিফিথ আপনি আশ্চর্যজনকভাবে দুর্দান্ত দুর্দান্ত। দুর্দান্ত হাঁটার জন্য ধন্যবাদ!
এলি_রোজেন

7
@ ব্র্যাডলিগ্রিফিথ আমি আশা করি আপনি এই উত্তরটি তৈরি করতেন যাতে আমিও এটি চিহ্নিত করতে পারি! আপনার অনন্য অবদানটি প্রতিষ্ঠা করছিল যা দেখায় নিয়ন্ত্রক কোন কোড পায় । এটি কোথাও খুঁজে পেল না। ধন্যবাদ!
অ্যারন ভেগ

3
যেটির জন্য এখনও এটি স্ট্যাম্পড, কীটি হ'ল, আপনি বর্তমানে যে ভিউ কন্ট্রোলারটিতে ফিরেছেন তার মধ্যে আইবিএসিএশন থাকা দরকার, আপনি বর্তমানে যেটি ছিলেন না তার মধ্যে নয়। @ ব্র্যাডলিগ্রিফিথ এটি গিটহাবের কাছে বানান করেছেন, তবে আমি এটি দেখিনি have অন্য কোথাও উল্লেখ করা হয়েছে। সেই অংশটি সমালোচনামূলক।
আক্সেভা

163

উদ্দেশ্য সি এবং সুইফ্ট সহ এখানে একটি সম্পূর্ণ উত্তর:

1) IBActionআপনার গন্তব্য ভিউ কন্ট্রোলারে একটি অনিচ্ছাকৃত সিগ তৈরি করুন (যেখানে আপনি সেলাই করতে চান)। বাস্তবায়ন ফাইলের যে কোনও জায়গায়।

// Objective C

    - (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {

    }

// Swift

 @IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {

    }

2) সোর্স ভিউ কন্ট্রোলারে (আপনি যে নিয়ামকটি থেকে সিক্রেট করছেন) ⌃ + প্রস্থান করতে "ক্রিয়াকলাপের নাম" থেকে টেনে আনুন। আপনার পপআপের প্রথম ধাপে তৈরি করা অচিহ্নিত সেগুটি দেখতে হবে। (যদি আপনি এটি দেখতে না পান তবে এক ধাপ পর্যালোচনা করুন)। আনউইন্ডটিটো কনটেনারভিসি বাছুন: পপআপ থেকে, বা আপনার সোর্স কন্ট্রোলারটিকে আনওয়াইন্ড আইবিএક્શનের সাথে সংযুক্ত করতে আপনি নিজের পদ্ধতির নাম দিয়েছেন।

এখানে চিত্র বর্ণনা লিখুন

3) স্টোরিবোর্ডের সোর্স ভিউ কন্ট্রোলারের ডকুমেন্টের রূপরেখায় সিগ নির্বাচন করুন (এটি নীচের দিকে তালিকাভুক্ত করা হবে), এবং এটি একটি সনাক্তকারী দিন

এখানে চিত্র বর্ণনা লিখুন

৪) সোর্স ভিউ কন্ট্রোলার থেকে এই পদ্ধতিটি ব্যবহার করে আনইন্ড সিগডকে কল করুন , আপনার আনইন্ডিং সেগের নামটি স্থির করুন।

// উদ্দেশ্য গ

[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];

// সুইফ্ট

self.performSegueWithIdentifier("unwindToContainerVC", sender: self)

বিশেষ দ্রষ্টব্য। সোর্স কন্ট্রোলারের যে কোনও উন্মুক্ত বৈশিষ্ট্য অ্যাক্সেস করতে আনওয়াইন্ড পদ্ধতিতে সেগ প্যারামিটারের সোর্স ভিউকন্ট্রোলার সম্পত্তিটি ব্যবহার করুন। এছাড়াও, লক্ষ্য করুন যে কাঠামোটি উত্স নিয়ামককে বরখাস্ত করে। আপনি যদি নিশ্চিত করতে চান যে লগ বার্তা সহ উত্স নিয়ামকটিতে একটি ডেলোক পদ্ধতি যুক্ত করা হয় যা একবার নিহত হওয়ার পরে তা চালানো উচিত। ডেলোক যদি আগুন না দেয় তবে আপনার ধরে রাখতে পারে একটি চক্র।


2
আমার প্রোগ্রামটি কাজ করে না, এমনকি বলা হয় না(IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue
xhg

2
এই সমাধানটি কার্যকর হয় না যখন ভিউ কন্ট্রোলার, আপনি
অনিচ্ছাকৃত

@ এমএনএল আপনি নিশ্চিতভাবে যা বলছেন তা নিশ্চিত নয় তবে এটি স্টোরিবোর্ডের দৃশ্য বা নিবসের সাথে কাজ করে। আপনি যদি কোডটিতে একটি ভিউকন্ট্রোলার দৃশ্য তৈরি করে থাকেন তবে আপনি আইবি "তাদের" নামে "ফেরত" দেওয়ার কোনও পদ্ধতি ব্যবহার করবেন না, যা কোড এবং আইবির মধ্যে যোগাযোগের উদ্দেশ্য হিসাবে কাজ করে তবে তা সত্যিই অকার্যকর। যে আপনার মন্তব্য ঠিকানা?
হাসিবোট

1
তোমার দেখাচ্ছে ছবি ctrl+dragথেকে ViewControllerথেকে Exitঅবিশ্বাস্যভাবে সহায়ক ছিল। ধন্যবাদ!
কেবিপন্টিয়াস

সুইফট 4.2 ব্যবহারের জন্য: self.performSegue (withIdentifier: "unwindToVC", প্রেরক: স্ব)
Reefwing

81

bradleygriffithএর উত্তর দুর্দান্ত ছিল। আমি 10 পদক্ষেপ নিয়েছি এবং সরলকরণের জন্য একটি স্ক্রিনশট তৈরি করেছি। এটি এক্সকোড 6 এর একটি স্ক্রিনশট।

  1. ভিউটিতে কোনও ক্রিয়া / বোতাম ছাড়াই আনওয়াইন্ড তৈরি করতে কমলা আইকন থেকে লাল প্রস্থান আইকনে নিয়ন্ত্রণ-টানুন।

এখানে চিত্র বর্ণনা লিখুন

  1. তারপরে unwind segueপাশের বারটি নির্বাচন করুন :

এখানে চিত্র বর্ণনা লিখুন

  1. একটি সেগু শনাক্তকারী স্ট্রিং সেট করুন:

এখানে চিত্র বর্ণনা লিখুন

  1. কোড থেকে সনাক্তকারী অ্যাক্সেস করুন:
[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];

4
প্রথমত, আন-বাইন্ডিংয়ের পদ্ধতিটি অবশ্যই অবশ্যই অন্তর্ভুক্ত করতে হবে UIViewController। তারপরে আপনার সমাধানটি কাজ করবে
অ্যালেক্স সিও

5
এবং আপনাকে এই নতুন সিগনে আইডেন্টিফায়ার সেট করতে হবে! এটি সম্পর্কে ভুলবেন না।
kraag22

1
সোর্স ভিউ কন্ট্রোলারে প্রোগ্রামেটিকভাবে "প্রস্থান" সংযোগ তৈরি করা সম্ভব?
অ্যান্ড্রু কিরনা

13

আমি ব্যবহার করেছি [self dismissViewControllerAnimated: YES completion: nil];যা আপনাকে কলিংয়ে ফিরিয়ে দেবে ViewController


6
ল্যারি, আপনি যদি পূর্ববর্তী ভিউ কন্ট্রোলারটিতে ফিরে আসতে চান, তবে এটি এখন একমাত্র বৈধ পন্থা you প্রশ্নটি উঠে এসেছিল কারণ এক্সকোড ৪.৪ এ নতুনভাবে একটি উপস্থাপনা ক্রমে কোনও পূর্ববর্তী ভিউ কন্ট্রোলারের কাছে কোনও ভিউ কন্ট্রোলার থেকে "আনওয়াইন্ড" করার ক্ষমতা। বিশদ জন্য ডাব্লুডাব্লুডিসি 2012 সেশন 407 দেখুন।
tobinjim

11

আনওয়াইন্ড সেগুয়ে অ্যাপলের টেকনিক্যাল নোট থেকে পাঠ্য উদ্ধৃত করা: একটি অযাচিত সিগ যুক্ত করার জন্য যা কেবলমাত্র প্রোগ্রামিকভাবে উদ্দীপ্ত হবে, দৃশ্যের দৃশ্যের নিয়ামক আইকনটি থেকে তার প্রস্থান আইকনে নিয়ন্ত্রণ + টেনে আনুন, তারপরে পপআপ মেনু থেকে নতুন সেগমেন্টের জন্য একটি আনইনড ক্রিয়া নির্বাচন করুন।

প্রযুক্তিগত নোট লিঙ্ক


6

উপরের বিশাল চৌধুরীর উত্তর আমার পক্ষে কাজ করেছিল। সিকটিকে ম্যানুয়ালি ট্রিগার করতে আমি এটি যুক্ত করব:

[self performSegueWithIdentifier:@"mySegueName" sender:self];

ভিউকন্ট্রোলারের মধ্যে থেকে আপনাকে স্টোরিবোর্ডে ভিউকন্ট্রোলারের দৃশ্যের অধীনে এবং আরএইচএসে থাকা বৈশিষ্ট্য দৃষ্টিতে আনইন্ড সিগ নির্বাচন করতে হবে যাতে উপরের উদাহরণে আপনি কোডটিতে ("মাইসিগনাম" নাম উল্লেখ করছেন এমন পরিচয়কারী ক্ষেত্রটি নাম রাখে তা নিশ্চিত করে )।

যদি আপনি এই পদক্ষেপটি বাদ দেন তবে উপরের রেখাটি একটি ব্যতিক্রম ছুঁড়ে দেবে যা সিক নামটি জানা যায়নি।


3

পিছনে সামঞ্জস্যপূর্ণ সমাধান যা আগ্রহী তাদের 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;
        }
    }
}

2
নেভিগেশন কন্ট্রোলার স্ট্যাকের নির্দিষ্ট শ্রেণিতে ফিরে যাওয়ার চেয়ে আনওয়াইন্ড সেগগুলি আরও অনেক কিছু করে।
স্টিভ মোসার

2

সুইফট 4 :

1. আপনি যা খুলে দিতে চান নিয়ন্ত্রণের ভিতরে সেগুর সাথে একটি @ আইবিএশন তৈরি করুন :

    @IBAction func unwindToVC(segue: UIStoryboardSegue) {

    }

২. স্টোরিবোর্ডে, নিয়ামক থেকে আপনি সিআরটিএল থেকে টানুন (আনইন্ডিং) করতে চান নিয়ন্ত্রণ সাইন থেকে টানুন সাইন থেকে প্রস্থান করতে এবং আপনার আগে তৈরি পদ্ধতিটি চয়ন করতে:

এখানে চিত্র বর্ণনা লিখুন

৩. এখন আপনি লক্ষ্য করতে পারেন যে নথির রূপরেখায় আপনার কাছে "আনওয়াইন্ড সেগু ...." শিরোনাম সহ নতুন লাইন রয়েছে। এখন আপনার এই লাইনে ক্লিক করুন এবং শনাক্তকারীকে সেট করতে অ্যাট্রিবিউট ইন্সপেক্টরটি খুলুন (আমার ক্ষেত্রে উইন্ডসইগেইডিন্টিফায়ার )।

এখানে চিত্র বর্ণনা লিখুন

৪. আপনি প্রায় শেষ! এখন আপনাকে ভিউ কন্ট্রোলারটি খুলতে হবে যা আপনি খুলে যেতে চান এবং এমন একটি পদ্ধতি তৈরি করতে পারেন যা সেগ সম্পাদন করবে। উদাহরণস্বরূপ আপনি বোতামটি যুক্ত করতে পারেন, @ আইবিএક્શનের সাথে কোডের সাথে এটি সংযুক্ত করুন , তার পরে এই আইবিএ ક્શનের মধ্যে পারফরমসেট যুক্ত করুন (আইডেন্টিফায়ার: প্রেরক :) পদ্ধতি:

     @IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
         performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
     }

তাই আপনাকে যা করতে হবে তা হল!


সোর্স ভিউ কন্ট্রোলারে প্রোগ্রামেটিকভাবে "প্রস্থান" সংযোগ তৈরি করা সম্ভব?
অ্যান্ড্রু কিরনা

1

সুইফট 4.2, এক্সকোড 10+

স্টিরিবোর্ডের মাধ্যমে ভিসি কীভাবে এটি করবেন তা ভাবছেন তাদের জন্য (যারা "প্রোগ্রাম্যমেটিক্যালি" + "আনওয়াইন্ড সেগু" অনুসন্ধান থেকে এই প্রশ্নে আসছেন)।

প্রদত্ত যে আপনি ক্রমবর্ধমানভাবে সেলোগুলি সেটআপ করতে পারবেন না, সবচেয়ে সহজ একমাত্র প্রোগ্রাম্যাটিক সমাধান হ'ল:

navigationController?.popToRootViewController(animated: true)

যা স্ট্যাকের সমস্ত ভিউ কন্ট্রোলারকে আপনার রুট ভিউ নিয়ন্ত্রকের কাছে ফিরিয়ে আনবে।


নেভিগেশন স্ট্যাক থেকে কেবল শীর্ষস্থানীয় দেখা নিয়ন্ত্রককে পপ করতে, ব্যবহার করুন:

navigationController?.popViewController(animated: true)


1
এটি সাধারণত আপনি যা চান তার চেয়ে বেশি - একটি ব্যাক পপ করতে কেবল করুন: [সেল্ফ-নেভিগেশন কন্ট্রোলার পপভিউ কন্ট্রোলার অ্যানিমেটেড: হ্যাঁ];
অ্যান্ডি ওয়াইনস্টাইন

প্রকৃতপক্ষে, আমি আমার উত্তরে এটি যোগ করেছি - ধন্যবাদ @
অ্যান্ডি

0

এফওয়াইআই: একটি ভিউ কন্ট্রোলারের মধ্যে থেকে ডাকা ম্যানুয়াল আনইন্ড উইন্ড সিকুইশন অ্যাকশন নিয়ে কাজ করার জন্য @ ভাদিমের জবাবের জন্য আপনাকে কমান্ডটি লিখতে হবে:

[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];

ওভাররডেন শ্রেণীর পদ্ধতির অভ্যন্তরে ভিডড অ্যাপটি এর মতো:

-(void) viewDidAppear:(BOOL) animated
{
    [super viewDidAppear: animated];

    [self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}

যদি আপনি এটিকে অন্যান্য ভিউকন্ট্রোলার পদ্ধতিগুলিতে ভিউডিডলড বা ভিউউইল অ্যাপ্লায় রাখেন তবে এটিকে অগ্রাহ্য করা হবে।


3
অবশ্যই ভুল। আপনি যেখানেই চান সেখান থেকে পারফরমেশনসথিউথআইডেন্টিফায়ারকে কল করুন।
হাসিবোট

এটি কি দেখার বোঝা শেষ হওয়ার সাথে সাথেই কেবল অনাকাঙ্ক্ষিত সিগ সম্পাদন করবে না? আপনি যখন চান তখন সম্পাদন করার চেয়ে উদাহরণস্বরূপ বোতামটি চাপানোর পরে।
পাহেনেভ

@ পাহ্নেভ হ্যাঁ তা হবে। আমি জানি না কীভাবে এই উত্তরটি কোনও অগ্রগতি পেয়েছে। কলিং performSegueWithIdentfierহুবহু এটি করে: এক
ভিউকন্ট্রোলার

সম্পূর্ণ ভুল. এটি কেবলমাত্র চালু হওয়ার সাথে সাথে পুনরায় ফিরে আসবে।
লি প্রবার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.