سؤال

لقد واجهت موقفًا مثيرًا للاهتمام، لدي تطبيق iPhone به 3 UITableViewControllerيعرض كل منها نفس البيانات تقريبًا (يمكنك القول إنها مسألة تصفية).حتى الآن كان لدي 3 وحدات NIB منفصلة لهذا الغرض، ولكل منها وحدة التحكم الخاصة به، بالإضافة إلى UITableViewControllerكان بالداخل UINavigationController من أجل الأزرار في الأعلى.

الآن لتحسين التطبيق وتقليل آثاره، أقوم بتجميع كل المنطق في وحدة تحكم واحدة مشتركة (an UITableViewController) وترك بنك الاستثمار القومي واحدًا فقط في مكانه.ستهتم وحدة التحكم المشتركة بتصفية البيانات والإشارة إلى البيانات الصحيحة.

لذلك، أقوم بتحميل نفس وحدة تحكم مشتركة إلى 3 من وحدات التحكم في الملاحة:

navControllerA = [[UINavigationController alloc] initWithRootViewController: commonTableController];

وأضفت وحدات التحكم في التنقل هذه إلى ملف UITabBarController:

navigationControllersArray = [NSArray arrayWithObjects: navControllerA, navControllerB, navControllerC, nil];
[tabController setViewControllers:[NSArray arrayWithArray:navigationControllersArray]];

الآن كل شيء على ما يرام، تظهر علامات التبويب، وتظهر طرق عرض الجدول.ولكن بمجرد لمس التالي UITabBarItem والعودة إلى السابق UITableViewController لا تظهر، يمكنك فقط رؤية UIWindow في مكانها.ال UITableViewController يبقى مرئيًا فقط لآخر لمسة UITabBarItem.

هل هناك نوع من UITabBarعرض آلية التحميل التي لست على علم بها؟

هل كانت مفيدة؟

المحلول

يمكن أن تكون كل وحدة تحكم عرض على مكدس وحدة تحكم تنقل واحدة فقط، ولا يمكن أن تكون في عدة أماكن في تلك المكدس.

إذا كنت تريد حقًا توفير الذاكرة باستخدام وحدة تحكم عرض واحدة فقط، فأنا أقترح أنه بدلاً من استخدام وحدة تحكم شريط علامات التبويب، ما عليك سوى استخدام عرض شريط علامات التبويب وتعيين وحدة تحكم عرض الجذر كمفوض لها.ستقوم وحدة التحكم في العرض الجذر بعد ذلك بتفسير أحداث شريط علامات التبويب مباشرةً وتغيير التصفية وفقًا لذلك.

نصائح أخرى

إذا كنت تريد حقًا تبديل مجموعات البيانات ضمن عرض واحد، فيبدو أن الطريقة الأفضل تتمثل في استخدام شريط الأدوات بدلاً من شريط علامات التبويب.يدور شريط علامات التبويب حول تبديل طرق العرض حيث كما أشار الملصق الآخر، يجب أن تكون جميع طرق العرض تابعة لعرض واحد ووحدة تحكم تنقل واحدة.إن وجود شريط علامات تبويب يستدعي وحدة التحكم الفردية هذه لتبديل مجموعات البيانات أمر أكثر منطقية، وإلا فإن استخدام UISegmentedControl سيعمل أيضًا بشكل جيد (نظرًا لأن لديك ثلاثة عناصر ويمكنك الحصول على ما يصل إلى ثلاثة أجزاء فقط).

استخدام UITabbarController داخل UINavigationController غير مدعوم.يمكنك كتابة UIViewController عادي لتقليد UITabbbarController، الذي يمكن دفعه لعرض المكدس.انظر الى هذا هذا سؤال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top