নেভিগেশন কন্ট্রোলার স্ট্যাক, সাবভিউ বা মডেল কন্ট্রোলার ব্যবহার না করেই ভিউ কন্ট্রোলারের পরিবর্তন অ্যানিমেট করবেন?


142

নেভিগেশনকন্ট্রোলারদের পরিচালনা করতে ভিউকন্ট্রোলার স্ট্যাক এবং সীমিত অ্যানিমেশন ট্রানজিশন রয়েছে।

বিদ্যমান ভিউ কন্ট্রোলারের সাথে একটি ভিউ কন্ট্রোলারকে উপ-দর্শন হিসাবে যুক্ত করার জন্য সাব-ভিউ কন্ট্রোলারের সাথে ইভেন্টগুলি পাস করা প্রয়োজন যা পরিচালনা করতে ব্যথা হয়, সামান্য বিরক্তি দিয়ে বোঝা হয় এবং প্রয়োগ করার সময় সাধারণত খারাপ হ্যাকের মতো মনে হয় (অ্যাপল তার বিরুদ্ধেও পরামর্শ দেয়) এটা করছি).

কোনও মডেল ভিউ কন্ট্রোলার উপস্থাপন করে আবার একটি ভিউ কন্ট্রোলারকে অন্যের উপরে রাখে এবং উপরে বর্ণিত ইভেন্ট পাস করার সমস্যাটি না থাকলেও এটি সত্যরূপে ভিউ কন্ট্রোলারকে 'অদলবদল' করে না, এটি স্ট্যাক করে।

স্টোরিবোর্ডগুলি আইওএস 5 এর মধ্যে সীমাবদ্ধ এবং প্রায় আদর্শ, তবে সমস্ত প্রকল্পে ব্যবহার করা যায় না।

উপরের সীমাবদ্ধতা ছাড়াই দর্শন নিয়ন্ত্রকগুলি পরিবর্তন করার উপায় এবং তাদের মধ্যে অ্যানিমেটেড ট্রানজিশনের অনুমতি দেওয়ার জন্য কেউ কি সলিড কোড উদাহরণ উপস্থাপন করতে পারেন?

একটি ঘনিষ্ঠ উদাহরণ, তবে কোনও অ্যানিমেশন নেই: নেভিগেশন নিয়ামক ছাড়াই একাধিক আইওএস কাস্টম ভিউ নিয়ন্ত্রণকারী কীভাবে ব্যবহার করবেন

সম্পাদনা: ন্যাভ কন্ট্রোলারের ব্যবহার ঠিক আছে, তবে সেখানে অ্যানিমেটেড ট্রানজিশন শৈলী হওয়া দরকার (কেবল স্লাইডের প্রভাব নয়) দেখানো হচ্ছে ভিউ কন্ট্রোলারটিকে পুরোপুরি অদলবদল করা প্রয়োজন (স্ট্যাকড নয়)। যদি দ্বিতীয় দর্শন নিয়ামককে অবশ্যই স্ট্যাক থেকে অন্য ভিউ কন্ট্রোলারটিকে সরিয়ে ফেলতে হবে, তবে এটি পর্যাপ্ত পরিমাণে আবৃত নয় ulated

সম্পাদনা 2: আইওএস 4 এই প্রশ্নের মূল ওএস হওয়া উচিত, স্টোরিবোর্ডগুলি (উপরে) উল্লেখ করার সময় আমার স্পষ্ট করা উচিত ছিল।


1
আপনি একটি নেভিগেশন নিয়ামক দিয়ে কাস্টম অ্যানিমেশন স্থানান্তর করতে পারেন। যদি এটি গ্রহণযোগ্য হয় তবে দয়া করে আপনার প্রশ্ন থেকে এই সীমাবদ্ধতাটি সরিয়ে দিন এবং আমি একটি কোড উদাহরণ পোস্ট করব।
রিচার্ড ব্রাইটওয়েল

@ রিচার্ড যদি এটি স্ট্যাক পরিচালনার ঝামেলা এড়ায় এবং ভিউ কন্ট্রোলারগুলির মধ্যে বিভিন্ন অ্যানিমেটেড ট্রানজিশন শৈলীগুলিকে সমন্বিত করে তবে নেভিগেশন নিয়ন্ত্রকের ব্যবহার ভাল!
টাইগারকডিং

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

@ রিচার্ডব্রেটওয়েল আপনি এখানে বলেছিলেন যে কেউ একজন নেভিগেশন নিয়ন্ত্রণকারী ব্যবহার করে ভিউ কন্ট্রোলারদের মধ্যে কাস্টম অ্যানিমেশন ট্রানজিশন করতে পারে ... কীভাবে? আপনি একটি উদাহরণ পোস্ট করতে পারেন? ধন্যবাদ।
হাঁস

উত্তর:


108

সম্পাদনা: নতুন উত্তর যা কোনও দিকনির্দেশনায় কাজ করে। মূল উত্তরটি কেবল তখনই কাজ করে যখন ইন্টারফেসটি প্রতিকৃতি নির্দেশে থাকে। এটি খ / সি ভিউ রূপান্তর অ্যানিমেশন যা উইন্ডোতে যুক্ত হওয়া প্রথম দর্শন নীচের কমপক্ষে একটি স্তরের দৃশ্যের সাথে দর্শন ডাব্লু / আলাদা ভিউ অবশ্যই উপস্থিত হবে (উদাঃwindow.rootViewController.view.anotherView)।

আমি কল করেছি এমন একটি সাধারণ ধারক শ্রেণি প্রয়োগ করেছি TransitionController। আপনি এটি https://gist.github.com/1394947 এ খুঁজে পেতে পারেন ।

অন্যদিকে, আমি পৃথক শ্রেণিতে প্রয়োগটি পছন্দ করি খ / সি এর পুনরায় ব্যবহার করা সহজ। আপনি যদি এটি না চান তবে আপনি TransitionControllerক্লাসের প্রয়োজনীয়তা হ্রাস করে সরাসরি আপনার অ্যাপের প্রতিনিধিতে একই যুক্তিটি প্রয়োগ করতে পারেন । আপনার যে যুক্তিটি প্রয়োজন তা একই হবে।

এটি নিম্নলিখিত হিসাবে ব্যবহার করুন:

আপনার অ্যাপের প্রতিনিধি

// add a property for the TransitionController

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    MyViewController *vc = [[MyViewContoller alloc] init...];
    self.transitionController = [[TransitionController alloc] initWithViewController:vc];
    self.window.rootViewController = self.transitionController;
    [self.window makeKeyAndVisible];
    return YES;
}

যে কোনও ভিউ কন্ট্রোলার থেকে একটি নতুন ভিউ কন্ট্রোলারে স্থানান্তরিত করতে

- (IBAction)flipToView
{
    anotherViewController *vc = [[AnotherViewController alloc] init...];
    MyAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
    [appDelegate.transitionController transitionToViewController:vc withOptions:UIViewAnimationOptionTransitionFlipFromRight];
}

সম্পাদনা: নীচের মূল উত্তর - কেবল পোর্টেট অভিমুখীকরণের জন্য কাজ করে

এই উদাহরণের জন্য আমি নিম্নলিখিত অনুমানগুলি করেছি:

  1. rootViewControllerআপনার উইন্ডোর মত হিসাবে নিযুক্ত একটি ভিউ কন্ট্রোলার রয়েছে

  2. আপনি যখন একটি নতুন দৃশ্যে স্যুইচ করেন আপনি নতুন ভিউটির মালিকানার সাথে ভিউকন্ট্রোলারের সাথে বর্তমান ভিউ কন্ট্রোলারকে প্রতিস্থাপন করতে চান। যে কোনও সময়ে, কেবলমাত্র বর্তমান ভিউকন্ট্রোলার জীবিত (যেমন বরাদ্দকৃত)।

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

অ্যাপের প্রতিনিধিতে স্থানান্তরকে প্রাণবন্ত করার কোড

- (void)transitionToViewController:(UIViewController *)viewController
                    withTransition:(UIViewAnimationOptions)transition
{
    [UIView transitionFromView:self.window.rootViewController.view
                        toView:viewController.view
                      duration:0.65f
                       options:transition
                    completion:^(BOOL finished){
                        self.window.rootViewController = viewController;
                    }];
}

দর্শন নিয়ামক ব্যবহারের উদাহরণ

- (IBAction)flipToNextView
{
    AnotherViewController *anotherVC = [[AnotherVC alloc] init...];
    MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
    [appDelegate transitionToViewController:anotherVC
                             withTransition:UIViewAnimationOptionTransitionFlipFromRight];
}

1
হ্যাঁ খুব সুন্দর! এটি কেবল কৌশলটিই করে না, এটি একটি খুব সাধারণ এবং পরিষ্কার কোড উদাহরণ। অনেক ধন্যবাদ!
টাইগারকডিং

তার কি আপনার জন্য ল্যান্ডস্কেপে সমস্যা সৃষ্টি করে না? এছাড়াও: এটি কি ভিউকন্ট্রোলারদের উইল অ্যাপল এবং ডায়া অ্যাপের পদ্ধতিগুলি ট্রিগার করে?
ফেলিক্স ল্যামোরাক্স

1
আমি জানি যে উপস্থিত কলগুলি করা হচ্ছে কারণ আমি সেগুলি লগইন করেছি। এটি কেন ওরিয়েন্টেশন পরিবর্তনের উপর প্রভাব ফেলবে তাও আমি দেখছি না। আপনি কীভাবে ভাবেন যে আপনি কেন এটি ব্যাখ্যা করতে পারেন?
11:37 এ টাইগারকডিং

1
@ এক্স জোনস দুর্দান্ত সমাধান, প্রথম ইনিশিয়েশন ট্রান্সভিসি = [TransitionController ... initWithViewController: aUINavCtrlObj] এর পরে আমি যে সমস্যার মুখোমুখি হচ্ছি তা বাদ দিয়ে আমার আইপ্যাড অ্যাপে বেশ ভাল কাজ করে; window.rootVC = transVC; AUINavCtrlObj এ দৃশ্যটি শীর্ষ থেকে 20 পিক্স প্যাড করা হয়েছে (অর্থাত্ নীচে 20 পিক্সাল সমস্ত দিকের স্ক্রিনের বাইরে (ইউআই উইন্ডো) সীমা ছাড়িয়েছে), তবে আমি [ট্রান্সভিসি ট্রানজিশনটিওভিউ কনট্রোলার: আরেকটিভিসি] প্যাডিংটি শেষ হয়ে গেছে। আমি ট্রানজিশন নিয়ন্ত্রণকারীটির লোড ভিউতে ফুলস্ক্রিনলয়আউট = না চেয়ে চেষ্টা করেছি, এটি কী করে তা কেবল স্ট্যাটাস বারের অধীনে একটি 20 পিক্সেল কালো অঞ্চল যুক্ত করে।
আবদুলিয়াম রেহমানিয়াস

1
@ আবদুলুলিয়াম রেহমানিয়াস: আমারও একই সমস্যা ছিল। আমি লাইন 25 পরিবর্তন করে এটি সংশোধন TransitionController.mকরতে UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];সাবধানে, কিন্তু আমি শুধুমাত্র iOS এর খুব সবচেয়ে নতুন সংস্করণটির এই ব্যবহার করেছি, পরীক্ষা তাই।
ফিল ক্যালভিন

67

আপনি অ্যাপলের নতুন ভিউকন্ট্রোলার সংযোজন সিস্টেমটি ব্যবহার করতে পারেন। আরও গভীরতর তথ্যের জন্য ডাব্লুডাব্লুডিসি ২০১১ সেশনের ভিডিও "প্রয়োগকারী UIViewControllerকনটেন্টমেন্ট" দেখুন।

আইওএস 5-এ নতুন, অন্তর্ভুক্তিটি UIViewControllerআপনাকে প্যারেন্ট ভিউ কনট্রোলার এবং এর মধ্যে থাকা বেশ কয়েকটি চাইল্ড ভিউ কনট্রোলার রাখতে দেয়। ইউআইএসপ্লিটভিউ কনট্রোলার এইভাবে কাজ করে। এটি করার মাধ্যমে আপনি পিতামাতার মধ্যে দৃশ্যের নিয়ামকগুলিকে স্ট্যাক করতে পারেন তবে আপনার নির্দিষ্ট অ্যাপ্লিকেশনের জন্য আপনি কেবলমাত্র একটি দৃশ্যমান ভিউ কনট্রোলার থেকে অন্যটিতে রূপান্তর পরিচালনা করতে পিতামাতাকে ব্যবহার করছেন। এটি চাইল্ড ভিউ নিয়ন্ত্রণকারী থেকে জিনিসগুলি করা এবং অ্যানিমেট করা অ্যাপলের অনুমোদিত উপায় pain এছাড়াও আপনি বিভিন্ন বিভিন্ন UIViewAnimationOptionরূপান্তর ব্যবহার করতে পারেন !

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

- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers{
    return YES;
}

প্রথম সন্তানের ভিউকন্ট্রোলার সেটআপ করার জন্য আপনি নীচের বা অনুরূপ আপনার পিতামাতার ভিউডিডলড পদ্ধতিতে করতে পারেন:

[self addChildViewController:self.currentViewController];
[self.view addSubview:self.currentViewController.view];
[self.currentViewController didMoveToParentViewController:self];
[self.currentViewController.swapViewControllerButton setTitle:@"Swap" forState:UIControlStateNormal];

তারপরে আপনার যখন চাইল্ড ভিউ কনট্রোলার পরিবর্তন করতে হবে তখন আপনি প্যারেন্ট ভিউ কনট্রোলারের মধ্যে নীচের লাইনের সাথে কিছু কল করবেন:

-(void)swapViewControllers:(childViewController *)addChildViewController:aNewViewController{
     [self addChildViewController:aNewViewController];
     __weak __block ViewController *weakSelf=self;
     [self transitionFromViewController:self.currentViewController
                       toViewController:aNewViewController
                               duration:1.0
                                options:UIViewAnimationOptionTransitionCurlUp
                             animations:nil
                             completion:^(BOOL finished) {
                                   [aNewViewController didMoveToParentViewController:weakSelf];

                                   [weakSelf.currentViewController willMoveToParentViewController:nil];
                                   [weakSelf.currentViewController removeFromParentViewController];

                                   weakSelf.currentViewController=[aNewViewController autorelease];
                             }];
 }

আমি এখানে একটি পূর্ণ উদাহরণ প্রকল্প পোস্ট করেছি: https://github.com/toolmanGitHub/stackedViewControllers । এই অন্যান্য প্রকল্পটি দেখায় যে কীভাবে UIViewControllerসম্পূর্ণ স্ক্রীনটি গ্রহণ করে না এমন কিছু বিভিন্ন ইনপুট ভিউকন্ট্রোলার প্রকারের মধ্যে কীভাবে কনটেইনমেন্ট ব্যবহার করা যায়। শুভকামনা


1
একটি দুর্দান্ত উদাহরণ। কোড পোস্ট করার জন্য সময় দেওয়ার জন্য আপনাকে ধন্যবাদ। অন্যদিকে, এটি কেবল আইওএস 5-এ সীমাবদ্ধ। প্রশ্নে উল্লিখিত হিসাবে: "[স্টোরিবোর্ড] আইওএস 5 এর মধ্যে সীমাবদ্ধ এবং প্রায় আদর্শ, তবে সমস্ত প্রকল্পে ব্যবহার করা যায় না।" বৃহত শতাংশ (প্রায় 40%?) গ্রাহকরা এখনও আইওএস 4 ব্যবহার করে বিবেচনা করে লক্ষ্য হ'ল আইওএস 4 এবং আরও বেশি কিছুতে কাজ করে এমন কিছু সরবরাহ করা।
টাইগারকডিং

[self.currentViewController willMoveToParentViewController:nil];ট্রানজিশনের আগে আপনার ফোন করা উচিত নয় ?
ফেলিক্স ল্যামোরিক্স

@ ফেলিক্সল্যাম - ইউআইভিউউকন্ট্রোলার ধারক দস্তাবেজগুলিতে, আপনি যদি অ্যাডচিল্ডভিউ কনট্রোলার পদ্ধতিটি ওভাররাইড করেন তবেই আপনি উইলমোভটোপ্যারেন্টভিউ কনট্রোলারকে কল করবেন। এই উদাহরণে আমি এটি বলছি কিন্তু ওভাররাইডিং করছি না।
টাইমথিউলম্যান

2
ডাব্লুডাব্লুডিসি-র ডেমোতে আমার মনে হয় যে তারা রূপান্তর শুরু করার আগে তারা এটি ডেকেছিল, কারণ এই রূপান্তরটি বোঝায় না যে বর্তমানভিসি শূন্যে চলে যাবে। কোনও ইউআইটিববারকন্ট্রোলারের ক্ষেত্রে রূপান্তরটি কোনও ভিসির পিতামাতার পরিবর্তন করবে না। পিতামাতার কাছ থেকে অপসারণ করায় ডডমোভটোপ্যারেন্টভিউ কনট্রোলারকে কল করে: শূন্য, কিন্তু উইল নেই ... কল নেই। আইএমএইচও
ফেলিক্স ল্যামোরাক্স

7

ঠিক আছে, আমি জানি প্রশ্নটি নেভিগেশন নিয়ামক ব্যবহার না করে বলে, কিন্তু না করার কোনও কারণ নেই। আমার ঘুমাতে যাওয়ার জন্য ওপি সময়মত মন্তব্যে সাড়া দিচ্ছিল না। আমাকে ভোট দিন না। :)

কীভাবে বর্তমান ভিউ কন্ট্রোলারটিকে পপ করা যায় এবং একটি নেভিগেশন কন্ট্রোলার ব্যবহার করে একটি নতুন ভিউ কন্ট্রোলারে ফ্লিপ করা যায় তা এখানে:

UINavigationController *myNavigationController = self.navigationController;
[[self retain] autorelease];

[myNavigationController popViewControllerAnimated:NO];

PreferencesViewController *controller = [[PreferencesViewController alloc] initWithNibName:nil bundle:nil];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration: 0.65];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myNavigationController.view cache:YES];
[myNavigationController pushViewController:controller animated:NO];
[UIView commitAnimations];

[controller release];

এই স্ট্যাকটি কি নিয়ন্ত্রণকারীদের দেখে না?
টাইগারকডিং

1
হ্যাঁ, কারণ আমরা একটি নেভিগেশন নিয়ামক ব্যবহার করছি। যাইহোক, আপনি কোন ধরণের রূপান্তরগুলি সম্পাদন করতে পারেন তার সীমাবদ্ধতার কাছাকাছি চলে যায়, যা আমি ভেবেছিলাম আপনার প্রশ্নের মূল বিষয়।
রিচার্ড ব্রাইটওয়েল

বন্ধ করুন তবে বড় সমস্যাগুলির মধ্যে একটি হ'ল স্ট্যাকটিতে পরিচালনা করার জন্য একাধিক ভিউ কন্ট্রোলার রয়েছে। আমি সম্পূর্ণরূপে ভিউ কন্ট্রোলারগুলি পরিবর্তনের উপায়ের জন্য শিকার করছি। =)
টাইগারকডিং

আহ। আমারও এ জাতীয় কিছু থাকতে পারে ... আমাকে এক মিনিট সময় দিন। যদি তা না হয় তবে আমি এই উত্তরটি মুছব।
রিচার্ড ব্রাইটওয়েল

ঠিক আছে, আমি কোড দুটি পৃথক বিট একসাথে cobbled। আমি মনে করি এটি আপনার যা করতে চাইবে তা করবে।
রিচার্ড ব্রাইটওয়েল

3

যেহেতু আমি এই ঠিক সমস্যাটি পেরিয়ে এসেছি এবং সীমাবদ্ধ সাফল্যের পূর্বের সমস্ত বিদ্যমান উত্তরগুলির মধ্যে ভিন্নতার চেষ্টা করেছি, আমি কীভাবে অবশেষে এটি সমাধান করেছি তা পোস্ট করব:

কাস্টম সেগগুলিতে এই পোস্টে বর্ণিত হিসাবে , কাস্টম সেগগুলি করা সত্যিই সহজ। এগুলি ইন্টারফেস বিল্ডারে জড়িত হওয়া খুব সহজ, তারা আইবিতে সম্পর্ক দৃশ্যমান রাখে এবং সেগের উত্স / গন্তব্য দেখার নিয়ন্ত্রকদের দ্বারা তাদের খুব বেশি সমর্থন প্রয়োজন হয় না।

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

আমার ক্ষেত্রে, আমি একইরকম প্রতিস্থাপন সিগিকে ঘটতে চেয়েছিলাম, তবে একটি FlipFromLeftস্থানান্তর নিয়ে। আইওএস 5+ এর জন্য আমারও কেবল সমর্থন প্রয়োজন। কোড:

আরএএফলিপরেপ্লেসসিগ এইচ থেকে:

#import <UIKit/UIKit.h>

@interface RAFlipReplaceSegue : UIStoryboardSegue
@end

আরএএফলিপরেপ্লেসসিগ.এম থেকে:

#import "RAFlipReplaceSegue.h"

@implementation RAFlipReplaceSegue

-(void) perform
{
    UIViewController *destVC = self.destinationViewController;
    UIViewController *sourceVC = self.sourceViewController;
    [destVC viewWillAppear:YES];

    destVC.view.frame = sourceVC.view.frame;

    [UIView transitionFromView:sourceVC.view
                        toView:destVC.view
                      duration:0.7
                       options:UIViewAnimationOptionTransitionFlipFromLeft
                    completion:^(BOOL finished)
                    {
                        [destVC viewDidAppear:YES];

                        UINavigationController *nav = sourceVC.navigationController;
                        [nav popViewControllerAnimated:NO];
                        [nav pushViewController:destVC animated:NO];
                    }
     ];
}

@end

এখন, নিয়ন্ত্রণ-টানুন অন্য কোনও ধরণের সিগ সেটআপ করতে, তারপরে এটি একটি কাস্টম সেগু করুন, এবং কাস্টম সেগু ক্লাসের নামে টাইপ করুন, এবং এটি!


স্টোরিবোর্ড ছাড়াই কি প্রোগ্রামারিকভাবে এর কোনও উপায় আছে?
জাকদানস

যতদূর আমি জানি, একটি সেগু ব্যবহার করার জন্য আপনাকে এটি সংজ্ঞায়িত করতে হবে এবং স্টোরিবোর্ডে এটি একটি সনাক্তকারী দিতে হবে। আপনি ইউআইভিউউকন্ট্রোলারের –performSegueWithIdentifier:sender:পদ্ধতির সাথে কোডে একটি সেগুন প্রার্থনা করতে পারেন ।
রায়ান আরটেকোনা

1
আপনার ভিউডিডএক্সএক্সএক্সএক্স এবং ভিউউইলএক্সএক্সএক্সএক্সকে সরাসরি কল করা উচিত নয়।
বেন সিনক্লেয়ার

2

আমি এটির সাথে দীর্ঘ সময় ধরে লড়াই করেছি, এবং আমার একটি সমস্যা এখানে তালিকাভুক্ত হয়েছে , আমি নিশ্চিত নই যে আপনার যদি এই সমস্যা হয়েছে কিনা। এটি আইওএস 4 এর সাথে অবশ্যই কাজ করা উচিত তবে আমি এখানে যা প্রস্তাব করব তা এখানে।

প্রথমত, একটি নতুন NavigationControllerক্লাস তৈরি করুন । এখানেই আমরা সমস্ত নোংরা কাজ করব - অন্যান্য শ্রেণিগুলি pushViewController:যেমন এবং এর মতো কল কলকরণ পদ্ধতিগুলিকে "পরিষ্কার" করতে সক্ষম হবে । আপনার .h:

@interface NavigationController : UIViewController {
    NSMutableArray *childViewControllers;
    UIViewController *currentViewController;
}

- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL))completion;
- (void)addChildViewController:(UIViewController *)childController;
- (void)removeChildViewController:(UIViewController *)childController;

চাইল্ড ভিউ কন্ট্রোলার অ্যারে আমাদের স্ট্যাকের সমস্ত ভিউ কন্ট্রোলারের জন্য স্টোর হিসাবে কাজ করবে। আমরা স্বয়ংক্রিয়ভাবে থেকে সব ঘূর্ণন এবং মাপ কোড ফরোয়ার্ড হবে NavigationController's করা দৃশ্য currentController

এখন, আমাদের বাস্তবায়নে:

- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL))completion
{
    currentViewController = [toViewController retain];
    // Put any auto- and manual-resizing handling code here

    [UIView animateWithDuration:duration animations:animations completion:completion];

    [fromViewController.view removeFromSuperview];
}

- (void)addChildViewController:(UIViewController *)childController {
    [childViewControllers addObject:childController];
}

- (void)removeChildViewController:(UIViewController *)childController {
    [childViewControllers removeObject:childController];
}

এখন আপনি আপনার নিজস্ব বাস্তবায়ন করতে পারে pushViewController:, popViewControllerএবং এই ধরনের, এই পদ্ধতি কল ব্যবহার করে।

শুভকামনা, এবং আমি আশা করি এটি সাহায্য করে!


আবার আমাদের অবশ্যই ভিউ কন্ট্রোলারগুলিকে বিদ্যমান ভিউ কন্ট্রোলারের সাব-ভিউ হিসাবে যুক্ত করতে হবে ort মঞ্জুর, বিদ্যমান ন্যাভিগেশন কন্ট্রোলার এটাই করে, তবে এর অর্থ আমাদের মূলত এটি এবং এর সমস্ত পদ্ধতি পুনর্লিখন করতে হবে। বাস্তবে, আমাদের ভিউউইল অ্যাপয়ার এবং অনুরূপ পদ্ধতিগুলি বিতরণ করা এড়ানো উচিত। আমি ভাবতে শুরু করেছি যে এটি করার কোনও পরিষ্কার উপায় নেই। যাইহোক, সময় এবং প্রচেষ্টা গ্রহণ করার জন্য আপনাকে ধন্যবাদ!
টাইগারকডিং

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

তুমি কি নিশ্চিত? আমি এর আগে ভিউ কন্ট্রোলারগুলিকে একইভাবে অদলবদল করতাম এবং আমাকে সর্বদা বার্তা ফরোয়ার্ড করতে হত। আপনি অন্যথায় নিশ্চিত করতে পারেন?
টাইগারকডিং

না, আমি নিশ্চিত নই, কিন্তু আমি যে অনুমান করা হবে, যতদিন আপনি হিসাবে তারা অন্তর্হিত হওয়া দৃশ্য কন্ট্রোলার 'মতামত সরান তাদের যোগ তারা প্রদর্শিত হিসাবে না, যে উচিত স্বয়ংক্রিয়ভাবে ট্রিগার viewWillAppear, viewDidAppearএবং এই ধরনের।
এপসফ্যান

-1
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *viewController = (UINavigationController *)[storyboard instantiateViewControllerWithIdentifier:@"storyBoardIdentifier"];
viewController.modalTransitionStyle = UIModalTransitionStylePartialCurl;
[self presentViewController:viewController animated:YES completion:nil];

এই কোড ব্যবহার করে দেখুন।


এই কোডটি একটি ভিউ কন্ট্রোলার থেকে অন্য ভিউ কন্ট্রোলারে রূপান্তর দেয় যা একটি নেভিগেশন নিয়ামক রয়েছে।

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