প্রোগ্রামটিগতভাবে সেগু সম্পাদন করুন এবং গন্তব্য দর্শনে প্যারামিটারগুলি পাস করুন


174

আমার অ্যাপ্লিকেশনটিতে আমার কাছে একটি বোতাম রয়েছে যা প্রোগ্রামের মাধ্যমে একটি সেগ সম্পাদন করে:

- (void)myButtonMethod
{
    //execute segue programmatically
    [self performSegueWithIdentifier: @"MySegue" sender: self];
}

গন্তব্য দর্শনটি উল্লেখ করার এবং এটির কিছু পরামিতি পাস করার উপায় আছে কিনা তা আমি জানতে চাই।

আমি জানি যে prepareForSegueপদ্ধতিতে, আমি এটির সাথে এটি উল্লেখ করতে পারি: myDestinationViewController *vc = [segue destinationViewController];তবে আমি জানি না কীভাবে প্রোগ্রামটিকে এই সিগুটি কার্যকর করা যায়।

তোমার কোন ধারনা আছে?

ধন্যবাদ, ইয়াসা


হালনাগাদ:

এই প্রশ্নের জন্য আমি দুঃখিত! আমি কেবল এটি আবিষ্কার করেছিলাম, এমনকি যদি সিগুকে প্রোগ্রামগতভাবে prepareForSegueডাকা হয়, তবুও পদ্ধতিটিকে যেকোনো উপায়ে বলা হয় এবং সুতরাং একই স্বাভাবিক পরামিতিগুলি পরামিতিগুলি পাস করা সম্ভব।


44
একটি উত্তর হিসাবে আপডেট যুক্ত করুন এবং এটি গ্রহণ করুন যাতে লোকেরা জানতে পারে যে এটির উত্তর দেওয়া হয়েছে :)
ড্যানিয়েলবার্ড

উত্তর যুক্ত করুন, বিজ্ঞপ্তির জন্য মন্তব্য করুন।
ড্যানস্কিল

11
আপনার নীচের উত্তরটি সঠিক হিসাবে চিহ্নিত করা উচিত , যাতে লোকেরা জানে যে এটির উত্তর দেওয়া হয়েছে।
লিন্ডন শিয়াল

উত্তর:


107

উত্তরটি কেবলমাত্র এটি যে কোনওভাবে সেগটিকে ট্রিগার করা যায় তার কোনও পার্থক্য নেই।

prepareForSegue:sender:পদ্ধতি কোনো ক্ষেত্রে বলা হয় এবং এই যেখানে আপনি জুড়ে আপনার পরামিতি পাস হয়।


3
এটি এখনও আমাকে বিরক্ত করে - এর অর্থ হল আমাকে এক জায়গায় সেগ ট্রিগার করতে হবে, যেখানে আমার কাছে এমন ডেটা রয়েছে যা আমি প্যারামিটার হিসাবে অন্য কোনও কিছু থেকে বিচ্ছিন্নভাবে প্রেরণ করতে চাই, তবে সেই ডেটাটিকে সম্পূর্ণ আলাদা জায়গায় যুক্ত করতে চাই - প্রস্তুতিফেরসিগ, যেখানে আমরা পাস করার জন্য প্রয়োজনীয় ডেটা সম্পর্কে কিছু জানেন না। অর্থ, আমাকে দুটি পৃথক ফাংশন (একটি ট্রিগার ট্রিগল, অন্যটি - প্রস্তুতি) দ্বারা ভাগ করা প্রসঙ্গে প্রশ্নে সেই তথ্য দিয়ে একটি রাষ্ট্র তৈরি করতে হবে। আমার যখন প্রয়োজন কেবল তখনই কিছু তথ্য দিয়ে একটি নতুন দৃষ্টিভঙ্গি খুলতে চাই ...
নেভেনইন্টারমুন


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

প্রেরকের উপর সরকারী দস্তাবেজগুলি থেকে: "এই বিষয়টিকে আসল সেগমেন্টের সময় তথ্যমূলক উদ্দেশ্যে উপলব্ধ করা হয়েছে।"
নেভারউইনটারমুন

1
হ্যাঁ কোনও আসল পেডলোড পাস করবেন না, প্রসঙ্গটি যেমন কোনও সেল / বোতাম / সূচক / ইত্যাদি সেগটিকে ট্রিগার করেছিল।
ট্র্যাপার

90

পুরানো প্রশ্ন তবে আপনি যা জিজ্ঞাসা করছেন তা কীভাবে করবেন তার কোড এখানে। এই ক্ষেত্রে আমি একটি নির্বাচিত ঘর থেকে একটি টেবিল ভিউতে অন্য ভিউ নিয়ন্ত্রকের কাছে ডেটা পাঠাচ্ছি।

ট্র্যাজেট ভিউয়ের .h ফাইলটিতে:

@property(weak, nonatomic)  NSObject* dataModel;

.m ফাইলটিতে:

@synthesize dataModel;

dataModelহতে পারে string, intবা এই ক্ষেত্রে এটির মতো এমন একটি মডেল যা অনেকগুলি আইটেম ধারণ করে

- (void)someMethod {
     [self performSegueWithIdentifier:@"loginMainSegue" sender:self];
 }

অথবা ...

- (void)someMethod {
    UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"];
    [self.navigationController pushViewController: myController animated:YES];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"storyDetailsSegway"]) {
        UITableViewCell *cell = (UITableViewCell *) sender;
        NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
        NSDictionary *storiesDict =[topStories objectAtIndex:[indexPath row]];
        StoryModel *storyModel = [[StoryModel alloc] init];
        storyModel = storiesDict;
        StoryDetails *controller = (StoryDetails *)segue.destinationViewController;
        controller.dataModel= storyModel;
    }
}

3

সুইফট 4:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ExampleSegueIdentifier" {
        if let destinationVC = segue.destination as? ExampleSegueVC {
            destinationVC.exampleString = "Example"
        }
    }
}

সুইফট 3:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "ExampleSegueIdentifier" {
            if let destinationVC = segue.destinationViewController as? ExampleSegueVC {
                destinationVC.exampleString = "Example"
            }
        }
    }

0

আমি এক জায়গায় সিগ সম্পাদন করা এবং সেগের প্রস্তুতির জন্য পরামিতি প্রেরণের জন্য রাষ্ট্র বজায় রাখার সমস্যাটি বুঝতে পারি।

আমি এটি করার একটি উপায় খুঁজে বের করেছি। আমি একটি বিভাগ ব্যবহার করে ভিউকন্ট্রোলারগুলিতে ইউজারআইফোনডিক্ট নামে একটি সম্পত্তি যুক্ত করেছি। এবং আমি শনাক্তকারীকেও সেগমেন্টটি ওভাররাইড করেছি এমনভাবে, যাতে প্রেরক নিজে থাকেন (তার মানে নিয়ামক নিজেই)। এটি এই ব্যবহারকারীর তথ্যসূত্রটি পরবর্তী ভিউকন্ট্রোলারের কাছে পৌঁছে দেবে।

এখানে পুরো ইউজারআইফোনডিক্ট পাস করার পরিবর্তে আপনি প্রেরক হিসাবে নির্দিষ্ট প্যারামগুলিও পাস করতে পারেন এবং সে অনুযায়ী ওভাররাইড করতে পারেন।

আপনার 1 টি জিনিস মনে রাখা উচিত। আপনার সঞ্চালনের পদ্ধতিতে সুপার পদ্ধতি কল করতে ভুলবেন না।


0

আপনি যদি নতুন সুইফ্ট সংস্করণ ব্যবহার করেন তবে।

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "ChannelMoreSegue" {

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