سؤال

لدي UINAVICTCONTroller ولدي uiviews التي قمت بتشغيلها بين استخدام UiseutionControl. عند تشغيل المشاهدات، أضيف العرض كمنظر فرعي إلى وحدة تحكم الملاحة الخاصة بي:

[self.view addSubview:segmentTab1.view];

و

[self.view addSubview:segmentTab2.view];

ثم، في الفرعين الفرعين الفرعيين، يحتوي كل منها على نظرة قديمة، لكن مشكلتي غير قادر على دفع عرض جديد إلى عرض في didSelectRowAtIndexPath طريقة.

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

[self.navigationController pushViewController:detailsViewController animated:YES];

لقد حاولت أيضا

[super.navigationController pushViewController:detailsViewController animated:YES];

ماذا أفعل الخطأ - أو ليس من الممكن أن تفعل ذلك مع فرعي فرعي؟

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

المحلول

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

يمكنك فقط الحصول على وحدة تحكم ملاحة "مجانا" عندما تمت إضافته إلى مكدس التنقل نفسه باستخدام -PushViewController الذي لم تتم إضافة فروعك الفرعية بهذه الطريقة.

نصائح أخرى

كان لدي مشكلة مماثلة عند تنفيذ رأس مشترك لجميع وجهات النظر بعد أن العديد من المحاولات، لقد قمت بإصلاحها من قبل هذا -

في كل موثوقة

- (void)viewWillAppear:(BOOL)animated {

    [self.view addSubview:[[(NavAppAppDelegate *)[[UIApplication sharedApplication] delegate] headerview] view]];
    [[(NavAppAppDelegate *)[[UIApplication sharedApplication] delegate] headerview] viewWillAppear:YES];

}

لقد أشرت التالية التالية لتنفيذ طريقة عرض الرأسشائع XIB في وحدة تحكم عرض متعددة في iPhone

[self.view addSubview:[[(NavAppAppDelegate *)[[UIApplication sharedApplication] delegate] headerview] view]];     // line will load the header subview 

[navappappdelegate *) [[SharedApplication UIAPPlication] مندوب] Headerview] Viewwillappear: نعم]؛ // هذا هو استدعاء طريقة ViewWillAppear ل HeaderController حيث يمكننا كتابة التعليمات البرمجية للتحقق من تسجيل المستخدم أو عدم تسجيله وتغيير زر تسجيل الدخول إلى زر تسجيل الخروج وما إلى ذلك ..

بدلا من

[self.view addSubview:segmentTab1.view];

و

[self.view addSubview:segmentTab2.view];

يمكنك استخدام

[self pushViewController: segmentTab1 animated: NO];

و

[self pushViewController: segmentTab2 animated: NO];

لإضافة المشاهد الخاصة بك إلى التسلسل الهرمي للملاحة، وجعل [super.navigationController pushViewController:detailsViewController animated:YES]; الشغل.

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

أحد الاحتمالات، إذا لم تكن مفاجرا للأفراد، فسيكون كائن UINAVICTCONTroller الخاص بك هو Singleton، يمكن الوصول إليه من (على سبيل المثال) مندوب طلبك.

سوف تستدعي بذلك:

[[((MyApplicationDelegate*)[UIApplication delegate]) navController] 
                pushViewController: viewControllerToPush animated: YES];

حيث يوجد داخل MyapplicationDelegate، يعيد NavController كائن Singleton.

LogEntryDetailViewController *leController = [[LogEntryDetailViewController alloc] initWithNibName:@"LogEntryDetailView" bundle:[NSBundle mainBundle]];
    [leController setTitle:[NSString stringWithFormat:@"%@", [logEntriesArray objectAtIndex:row]]];
    [[self navigationController] pushViewController:leController animated:NO];      
    [leController release], leController = nil;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top