আমি এটি বুঝতে পেরে, আপনি চান:
- আইবিতে একটি ঘর ডিজাইন করুন যা একাধিক স্টোরিবোর্ড দৃশ্যে ব্যবহৃত হতে পারে।
- সেই কক্ষটি অনন্য স্টোরিবোর্ড সেগগুলি কনফিগার করুন, ঘরে থাকা দৃশ্যের উপর নির্ভর করে।
দুর্ভাগ্যক্রমে, বর্তমানে এটি করার কোনও উপায় নেই। আপনার পূর্ববর্তী প্রচেষ্টা কেন কাজ করে না তা বোঝার জন্য আপনাকে স্টোরিবোর্ড এবং প্রোটোটাইপ টেবিল দেখার ঘরগুলি কীভাবে কাজ করে তা সম্পর্কে আরও বুঝতে হবে। (যদি এই অন্যান্য প্রচেষ্টা কেন কাজ করে না সে বিষয়ে যদি আপনি চিন্তা না করেন তবে এখনই নির্দ্বিধায় পড়ুন you আপনি কোনও বাগ ফাইল করার পরামর্শ দেওয়ার পরিবর্তে আপনার কাছে আমার কাছে কোনও যাদুবিদ্যার কাজ নেই))
স্টোরিবোর্ড হ'ল সংক্ষেপে .xib ফাইল সংগ্রহের চেয়ে বেশি কিছু নয়। আপনি যখন কোনও স্টিলবোর্ডের বাইরে কিছু প্রোটোটাইপ সেল রয়েছে এমন একটি টেবিল ভিউ কন্ট্রোলার লোড করেন, তখন যা ঘটে তা এখানে:
- প্রতিটি প্রোটোটাইপ সেল আসলে তার নিজের এমবেডড মিনি-নিব। সুতরাং যখন টেবিল ভিউ কন্ট্রোলারটি লোড হচ্ছে, এটি প্রোটোটাইপ সেলটির প্রতিটি নিব এবং কলগুলির মধ্য দিয়ে চলে
-[UITableView registerNib:forCellReuseIdentifier:]
।
- সারণী দর্শনটি কক্ষগুলির জন্য নিয়ামককে জিজ্ঞাসা করে।
- আপনি সম্ভবত কল
-[UITableView dequeueReusableCellWithIdentifier:]
আপনি যখন কোনও প্রদত্ত পুনঃব্যবহার শনাক্তকারী সহ কোনও কক্ষের জন্য অনুরোধ করবেন তখন এটি নিব নিবন্ধিত আছে কিনা তা পরীক্ষা করে। যদি এটি করে, এটি সেই ঘরের একটি উদাহরণ ইনস্ট্যান্ট করে। এটি নিম্নলিখিত পদক্ষেপের সমন্বয়ে গঠিত:
- ঘরের নিব হিসাবে সংজ্ঞায়িত হিসাবে কক্ষের শ্রেণিটি দেখুন। কল করুন
[[CellClass alloc] initWithCoder:]
।
-initWithCoder:
পদ্ধতি মাধ্যমে যায় এবং যোগ subviews এবং সেট বৈশিষ্ট্য যে নিব সংজ্ঞায়িত করা হয়েছে। (এটি IBOutlet
সম্ভবত এখানেও জড়িয়ে পড়েছে, যদিও আমি এটি পরীক্ষা করি নি; এটি ঘটতে পারে -awakeFromNib
)
আপনি চাইলে আপনার সেলটি কনফিগার করুন।
এখানে লক্ষণীয় গুরুত্বপূর্ণ বিষয়টি হ'ল কোষের শ্রেণি এবং কোষের চাক্ষুষ উপস্থিতির মধ্যে একটি পার্থক্য রয়েছে । আপনি একই শ্রেণীর দুটি পৃথক প্রোটোটাইপ সেল তৈরি করতে পারেন, তবে তাদের মতামতগুলি সম্পূর্ণ আলাদাভাবে রেখেছিল। আসলে, আপনি যদি ডিফল্ট UITableViewCell
শৈলীগুলি ব্যবহার করেন তবে হুবহু এটিই ঘটছে। "ডিফল্ট" শৈলী এবং "সাবটাইটেল" শৈলী, উদাহরণস্বরূপ, উভয়ই একই UITableViewCell
বর্গ দ্বারা উপস্থাপিত হয় ।
এটি গুরুত্বপূর্ণ : ঘরের শ্রেণীর নির্দিষ্ট ভিউ হায়ারার্কির সাথে এক থেকে একের সম্পর্ক নেই । এই বিশেষ নিয়ামকের সাথে নিবন্ধিত প্রোটোটাইপ সেলে যা রয়েছে তা দিয়ে ভিউ হায়ারার্কি পুরোপুরি নির্ধারিত হয়।
দ্রষ্টব্য, পাশাপাশি, যে কোনও বিশ্বব্যাপী কোষ ডিসপেনসারিতে কোষটির পুনঃব্যবহার শনাক্তকারী নিবন্ধভুক্ত ছিল না। পুনরায় ব্যবহারকারীর শনাক্তকারী কেবলমাত্র একটি একক UITableView
দৃষ্টিকোণের প্রসঙ্গে ব্যবহৃত হবে ।
এই তথ্যটি দেওয়া, আসুন আপনার উপরের চেষ্টায় কী ঘটেছিল তা দেখুন।
কন্ট্রোলার # 1 এ, একটি প্রোটোটাইপ সেল যুক্ত করেছেন, আমার ইউআইটিএবলভিচেল সাবক্লাসে ক্লাস সেট করুন, পুনরায় ব্যবহার আইডি সেট করুন, লেবেল যুক্ত করেছেন এবং শ্রেণীর আউটলেটগুলিতে তারযুক্ত করেছেন। কন্ট্রোলার # 2 এ, একটি খালি প্রোটোটাইপ সেল যুক্ত করুন, এটি একই শ্রেণিতে সেট করুন এবং আগের মতো আইডি পুনরায় ব্যবহার করুন। এটি যখন চলতে থাকে তখন কক্ষগুলি কন্ট্রোলার # 2-এ প্রদর্শিত হলে লেবেলগুলি কখনই উপস্থিত হয় না। কন্ট্রোলার # 1 এ সূক্ষ্মভাবে কাজ করে।
এটি প্রত্যাশিত উভয় কক্ষের একই শ্রেণি ছিল, যদিও কন্ট্রোলার # 2 এর ঘরে পাঠ্যক্রমের স্তরক্রমটি সম্পূর্ণরূপে বিহীন ছিল। সুতরাং আপনি একটি খালি ঘর পেয়েছেন, যা আপনি প্রোটোটাইপটিতে ঠিক রেখেছিলেন।
প্রতিটি সেল প্রকারকে আলাদা আলাদা এনআইবিতে নকশাকৃত করে যথাযথ সেল বর্গ পর্যন্ত তারযুক্ত। স্টোরিবোর্ডে, একটি খালি প্রোটোটাইপ সেল যুক্ত করে এর শ্রেণিটি সেট করে এবং আমার সেল শ্রেণীর উল্লেখ করতে আইডি পুনরায় ব্যবহার করুন। কন্ট্রোলারদের ভিউডিডলড পদ্ধতিতে, পুনরায় ব্যবহার আইডির জন্য সেই এনআইবি ফাইলগুলি নিবন্ধভুক্ত করুন। যখন দেখানো হয়, উভয় নিয়ন্ত্রকের সেলগুলি প্রোটোটাইপের মতো খালি ছিল।
আবার, এটি প্রত্যাশিত পুনরায় ব্যবহারকারীর শনাক্তকারী স্টোরিবোর্ডের দৃশ্য বা নিবগুলির মধ্যে ভাগ করা যায় না, সুতরাং এই সমস্ত পৃথক কক্ষগুলির একই পুনরায় ব্যবহারের শনাক্তকারী ছিল তা অর্থহীন। টেবিলভিউ থেকে আপনি যে ঘরে ফিরে আসবেন তার উপস্থিতি স্টোরিবোর্ডের সেই দৃশ্যের প্রোটোটাইপ কক্ষের সাথে মেলে।
যদিও এই সমাধানটি কাছে ছিল। যেমনটি আপনি উল্লেখ করেছেন, আপনি কেবলমাত্র প্রোগ্রামটি কল করতে পারবেন -[UITableView registerNib:forCellReuseIdentifier:]
, UINib
ঘরটি সহ থাকা ঘরটি পেরিয়ে গিয়েছিলেন এবং আপনি সেই একই ঘরটি ফিরে পাবেন। (এটি এ কারণে নয় যে প্রোটোটাইপটি নিবটিকে "ওভাররাইডিং" করছিল; আপনি কেবল নিচটি টেবিলভিউ দিয়ে নিবন্ধন করেন নি, তাই এটি এখনও স্টোরিবোর্ডে থাকা নিবটির দিকে তাকিয়ে ছিল)) দুর্ভাগ্যক্রমে, এই পদ্ধতির কোনও ত্রুটি রয়েছে - স্ট্যান্ডলোন নিবলের কোনও কক্ষে স্টোরিবোর্ডের সেগগুলি হুক আপ করার কোনও উপায় নেই।
উভয় নিয়ন্ত্রকের খালি এবং সেট শ্রেণিতে প্রোটোটাইপ রেখেছি এবং আমার সেল শ্রেণিতে আইডি পুনরায় ব্যবহার করুন। কোডগুলিতে পুরোপুরি ঘরগুলি তৈরি করে। সমস্ত কন্ট্রোলারে সেলগুলি পুরোপুরি কাজ করে।
স্বাভাবিকভাবে. আশা করি, এটি আশ্চর্যজনক নয়।
সুতরাং, যে কারণে এটি কাজ করে না। আপনি নিজের ঘরগুলি স্ট্যান্ডলোন নিবগুলিতে ডিজাইন করতে পারেন এবং সেগুলি একাধিক স্টোরিবোর্ড দৃশ্যে ব্যবহার করতে পারেন; আপনি বর্তমানে স্টোরবোর্ডগুলি সেগুলিতে আলাদা করতে পারবেন না। আশা করি, যদিও আপনি এটি পড়ার প্রক্রিয়াতে কিছু শিখলেন।