سؤال

تحيات!لدي تطبيق iPhone يعمل (huzzah!) يستخدم ملف MainView.xib تحتوي على مخزنة بالكامل UITabBar مع عدة UINavigationController الأشياء ووجهات النظر جاهزة.

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

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

أظن أنني قريب جدًا من المشكلة بحيث لا أستطيع معرفة ما هو الخطأ.آمل حقًا أن يكون هذا خطأ تجريبيًا ولا يتطلب أي شيء أيضًا يا روب غولدبرغ!

وهنا السيناريو:

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

// Normally, the Tab Bar Controller's view is added to the window ... still do this?
[window addSubview:tabBarController.view];

// We could now set up a VC like so. Mostly harmless. (I know, "mvc" is an unfortunate abbreviation in this case.)
RegistrationVC *mvc = [[RegistrationVC alloc] initWithNibName:@"RegistrationView" bundle:nil];

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

المضي قدمًا.نقوم بإنشاء وحدة تحكم للتنقل بهدف تقديم الأشياء بشكل مشروط:

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:mvc];

نقوم بعد ذلك بتقديم VC المشروط الخاص بنا، باستخدام وحدة تحكم شريط علامات التبويب كأساس، وحرر البتات المخصصة.

[tabBarController presentModalViewController:nc animated:YES];
[nc release];
[mvc release];

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

 tabBarController.selectedViewController = nil;

نحن حقًا لا نريد/نحتاج إلى استخدام شريط علامات التبويب حتى بعد تم الانتهاء من VC المشروط (ولدينا مندوب للمساعدة في إعلامنا عند حدوث ذلك).

لماذا أزعجني حتى بشريط علامات التبويب؟حسنا، يبدو أنني بحاجة شئ ما لتعليق قبعة VC المشروطة هذه، ولا أعرف ما الذي يمكنني استخدامه أيضًا.

هل هذه هي الطريقة الوحيدة؟يبدو أنه يربط تسجيل VC وشريط علامات التبويب دون داعٍ، وتفوح منه رائحة...خطأ.

القرائن موضع ترحيب / تقدير!

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

المحلول

من الصعب الإجابة على هذا السؤال دون معرفة ما يظهره ملف Default.png.على افتراض أنك تتبع HIG ويعرض tabBarController فارغًا، أقترح طبقة معقدة إلى حد ما:الرؤية من القاع:عرض واجهة المستخدم:Default.png Top View:عرض التسجيل يقع أسفل الجزء السفلي من الشاشة

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

من ناحية OTOH، إذا كنت لا تتبع HIG وبدلاً من ذلك تظهر نوعًا ما من شاشة البداية، تصبح الأمور أسهل قليلاً.طبقة مثل هذا:الرؤية من القاع:TABBARCONTROLLER.View TOP VIEW:عرض واجهة المستخدم:الافتراضي.png

إذا كنت بحاجة إلى إظهار التسجيل، فقم بإجراء PresentModalViewController مع الرسوم المتحركة: NO ثم قم بإخفاء UIImageView.إذا لم يكن الأمر كذلك، فما عليك سوى إخفاء UIImageView.

هذا شرح مطول بدون صور، أتمنى أن يكون منطقيا.النقطة البارزة هي أنني أقترح إضافة UIImageView:Default.png ليكون أول ما يتم رؤيته عند بدء تشغيل التطبيق، واستخدام ذلك لتوجيه انتقالك إلى التسجيل أو tabBarController حسب الاقتضاء.

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