WWDC 2011 সেশন 102, অ্যাপল চালু দেখুন কন্ট্রোলার সংযত আচরণ, যা কাস্টম ভিউ নিয়ামক পাত্রে তৈরি করার ক্ষমতা, অনুরূপ UITabBarController
, UINavigationController
এবং মত।
উদাহরণগুলি বেশ কয়েকবার দেখেছি। এই প্যাটার্নের সাথে সম্পর্কিত পদ্ধতিগুলির এক ঝলকানি রয়েছে, তবে এগুলি সঠিকভাবে নির্ণয় করা কিছুটা কঠিন ছিল। আমার মনে হয় যা চলছে আমি এখানে পোস্ট করতে যাচ্ছি এবং দেখি যে সম্প্রদায়টি আমার সন্দেহগুলি নিশ্চিত বা অস্বীকার করবে।
পরিস্থিতি 1: কোনও পিতা-মাতার কাছ থেকে নতুন প্যারেন্ট ভিউ কন্ট্রোলারে সরানো
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view]; // or something like this.
[vc didMoveToParentViewController:self];
প্রদত্ত ক্রমে কি প্রথম দুটি লাইন ঘটতে হবে, বা সেগুলি বিপরীত করা যেতে পারে?
পরিস্থিতি 2: পিতা-মাতার ভিউ কন্ট্রোলার থেকে কোনও প্যারেন্ট ভিউ কন্ট্রোলারে সরানো
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
ফোন করাও কি দরকার [vc didMoveToParentViewController:nil]
? ১০২ সেশনের উদাহরণগুলি এই দৃশ্যে এটি করেনি , তবে আমি জানি না যে এটি বাদ ছিল কিনা।
পরিস্থিতি 3: এক পিতামাতার ভিউ কন্ট্রোলার থেকে অন্যটিতে চলে যাওয়া
এটি সম্ভবত নিম্নলিখিত উপায়ে ঘটবে, কারণ প্রতিটি প্যারেন্ট ভিউ কন্ট্রোলারে যুক্তি সংযুক্ত করা হবে।
// In the old parent
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
// In the new parent
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];
প্রশ্নাবলি
আমার মূল প্রশ্নটি হ'ল: সাধারণভাবে কন্ট্রোলার কনটেন্টটি কীভাবে কাজ করা উচিত? উপরে দেওয়া যান্ত্রিকগুলি কি সঠিক?
ফোন willMoveToParentViewController
করার আগে কি ফোন করা দরকার addChildViewController
? এটি আমার কাছে যৌক্তিক আদেশের মতো মনে হচ্ছে তবে এটি কি কঠোরভাবে প্রয়োজনীয়?
ফোন করার didMoveToParentViewController:nil
পরে কি ফোন করা দরকার removeFromParentViewController
?
addChildViewController
ভারসাম্যপূর্ণ হওয়া উচিতdidMoveToParentViewController
এবং এর সাথে ভারসাম্য বজায় রাখাwillMoveToParentViewController
উচিতremoveFromParentViewController
। আমি ঠিক এটিই খুঁজছিলাম। ডক্সে কীভাবে আমি এটি মিস করেছি তা নিশ্চিত নয়।