আমি কেবল প্রথমবারের মতো আইওএস বিকাশের জন্য আমার পা ডুবিয়ে দিচ্ছি এবং প্রথমে আমার একটি কাজটি হ'ল একটি কাস্টম কনটেইনার ভিউ কন্ট্রোলার বাস্তবায়ন করা যাক SideBarViewController
- এটি কল করতে দিন - এটি সম্ভাব্য কয়েকটি শিশু দর্শনীয় কন্ট্রোলারগুলির মধ্যে কোনটি বদলে দেয় it প্রদর্শন, প্রায় ঠিক একটি স্ট্যান্ডার্ড ট্যাব বার নিয়ামকের মত । (এটি অনেকটা ট্যাব বার নিয়ন্ত্রক তবে কোনও ট্যাব বারের পরিবর্তে আড়ালযোগ্য পার্শ্ব মেনু রয়েছে))
অ্যাপল ডকুমেন্টেশনের নির্দেশাবলী অনুসারে, আমি addChildViewController
যখনই আমার ধারকটিতে শিশু ভিউ কন্ট্রোলার যুক্ত করি তখনই আমি কল করি। বর্তমান চাইল্ড ভিউ কন্ট্রোলারটি অদলবদলের জন্য আমার কোডটি দেখতে এমন SideBarViewController
দেখাচ্ছে:
- (void)showViewController:(UIViewController *)newViewController {
UIViewController* oldViewController = [self.childViewControllers
objectAtIndex:0];
[oldViewController removeFromParentViewController];
[oldViewController.view removeFromSuperview];
newViewController.view.frame = CGRectMake(
0, 0, self.view.frame.size.width, self.view.frame.size.height
);
[self addChildViewController: newViewController];
[self.view addSubview: newViewController.view];
}
তারপরে আমি addChildViewController
এখানে কী করে তা বের করার চেষ্টা শুরু করেছিলাম এবং বুঝতে পেরেছিলাম যে আমার কোনও ধারণা নেই। নতুন স্টিকিং এছাড়া ViewController
এ .childViewControllers
অ্যারে, এটা কিছু কোনো প্রভাব পড়বে না বলে মনে হয়। শিশু কন্ট্রোলারের দৃষ্টিভঙ্গি থেকে শিশু কন্ট্রোলারের যে কাজগুলি আমি স্টোরিবোর্ডে রেখেছি তার থেকে অ্যাকশন এবং আউটলেটগুলি যদি আমি কখনও কল না করি তবুও ঠিক ঠিক কাজ করি addChildViewController
, এবং এটি অন্য কী প্রভাব ফেলতে পারে তা আমি কল্পনাও করতে পারি না।
আসলে, যদি আমি আমার কোডটি কল না করার জন্য আবার লিখি addChildViewController
, এবং পরিবর্তে এটি দেখতে ...
- (void)showViewController:(UIViewController *)newViewController {
// Get the current child from a member variable of `SideBarViewController`
UIViewController* oldViewController = currentChildViewController;
[oldViewController.view removeFromSuperview];
newViewController.view.frame = CGRectMake(
0, 0, self.view.frame.size.width, self.view.frame.size.height
);
[self.view addSubview: newViewController.view];
currentChildViewController = newViewController;
}
... তাহলে আমার অ্যাপটি এখনও পুরোপুরি কাজ করে, যতদূর আমি বলতে পারি!
অ্যাপল ডকুমেন্টেশনগুলি কী করবে addChildViewController
বা কেন আমাদের এটি কল করার কথা রয়েছে সে সম্পর্কে খুব বেশি আলোকপাত হয় না। UIViewController
ক্লাস রেফারেন্সে পদ্ধতিটি কীভাবে বা এটি ব্যবহার করা উচিত তার প্রাসঙ্গিক বিবরণের পুরো পরিমাণটি বর্তমানে:
একটি শিশু হিসাবে প্রদত্ত দর্শন নিয়ামক যুক্ত করে। ... এই পদ্ধতিটি কেবলমাত্র একটি কাস্টম কনটেইনার ভিউ কন্ট্রোলারের প্রয়োগ দ্বারা ডাকা হবে। আপনি যদি এই পদ্ধতিটিকে ওভাররাইড করেন তবে আপনার প্রয়োগের ক্ষেত্রে আপনাকে অবশ্যই সুপার কল করতে হবে।
একই পৃষ্ঠাতে এই অনুচ্ছেদটি আগেও রয়েছে:
আপনার ধারক দৃশ্যের নিয়ন্ত্রককে অবশ্যই শিশু শ্রেণির নিয়ামককে নিজের সাথে যুক্ত করতে হবে ভিউ হায়ারার্কির সাথে সন্তানের রুট ভিউ যুক্ত করার আগে। এটি আইওএসগুলিকে ইভেন্টগুলি যথাযথভাবে চাইল্ড ভিউ নিয়ন্ত্রণকারী এবং সেই নিয়ামকরা পরিচালনা করে এমন দৃশ্যগুলিতে রুট করার অনুমতি দেয়। তেমনি, এটির দৃষ্টিভঙ্গি থেকে কোনও সন্তানের রুট ভিউ মুছে ফেলার পরে, এটি সেই শিশু দৃষ্টিভঙ্গিটিকে নিজের থেকে সংযোগ বিচ্ছিন্ন করে। এই সমিতিগুলি তৈরি করতে বা ভাঙতে, আপনার ধারকটি বেস শ্রেণীর দ্বারা নির্ধারিত নির্দিষ্ট পদ্ধতিগুলিকে কল করে। এই পদ্ধতিগুলি আপনার ধারক শ্রেণীর ক্লায়েন্টদের দ্বারা ডাকা হবে না; এগুলি কেবলমাত্র আপনার ধারক প্রয়োগের দ্বারা প্রত্যাশিত ধারক আচরণ সরবরাহ করতে ব্যবহার করতে হবে।
এখানে কল করার জন্য আপনার প্রয়োজনীয় প্রয়োজনীয় পদ্ধতিগুলি রয়েছে:
অ্যাডচিল্ডভিউ কনট্রোলার:
সরানফ্র্যাম্পেন্টভিউ
কনট্রোলার উইলমোভটো প্যারেন্টভিউ কনট্রোলার:
ডডমোভটোপ্যারেন্টভিউ কনট্রোলার:
তবে এটি 'ইভেন্টস' বা 'প্রত্যাশিত কনটেন্ট আচরণ' কী বলছে বা কেন (বা এমনকি যখন) এই পদ্ধতিগুলি কল করা 'অপরিহার্য' সে সম্পর্কে কোনও ধারণা দেয় না।
অ্যাপল ডকুমেন্টেশনের "কাস্টম কনটেইনার ভিউ কন্ট্রোলারগুলি" বিভাগে কাস্টম কনটেইনার ভিউ কন্ট্রোলারের উদাহরণগুলি এই পদ্ধতিটিকে কল করে, তাই আমি ধরে নিই যে এটি কেবলমাত্র শিশু ভিউকন্ট্রোলারকে একটি অ্যারেতে পপ করার বাইরে কিছু গুরুত্বপূর্ণ উদ্দেশ্যে কাজ করে তবে আমি বুঝতে পারি না যে উদ্দেশ্য কি আউট। এই পদ্ধতিটি কী করে এবং আমি কেন এটি কল করব?