الوصول إلى وحدة تحكم ملاحة أعلى من وحدة تحكم التنقل الفرعية

StackOverflow https://stackoverflow.com/questions/3142134

سؤال

لدي آرائي وأجهزة التحكم التي تم إعدادها مثل ذلك.

  1. وحدة التحكم في علامة تبويب/شريط
  2. ضمن 1. هو وحدة تحكم عرض الجذر
  3. ضمن 2. عبارة عن وحدة تحكم تنقل تم إنشاؤها برمجياً ، يتم عرضها كقصة فرعية في وحدة التحكم في عرض الجذر.

ما أحاول القيام به هو الوصول إلى وحدة التحكم في Top Tab Bar/التنقل حتى أتمكن من دفع طريقة عرض إليها.

لقد جربت ParentViewController ولكن كل ما فعلته هو دفع العرض إلى وحدة تحكم NAV المبرمجة.

أي اقتراحات؟

هذه هي الطريقة التي قمت بإعداد وحدة التحكم في عرض الجذر الخاصة بي:

  -(void)viewDidAppear:(BOOL)animated{
    NSLog(@"ROOT APPEARED");
    [super viewDidAppear:animated];

    WorklistViewController *worklistController = [[WorklistViewController alloc]initWithNibName:@"WorklistView" bundle:[NSBundle mainBundle]];
    UINavigationController *worklistNavController = [[UINavigationController alloc] initWithRootViewController:worklistController];
    worklistNavController.navigationBar.barStyle = UIBarStyleBlackOpaque;
    worklistNavController.view.frame = watchlistView.frame;
    [worklistNavController.topViewController  viewDidLoad];
    [worklistNavController.topViewController  viewWillAppear:YES];
    [self.view addSubview:worklistNavController.view];

    GetAlertRequestViewController *alertsController = [[GetAlertRequestViewController alloc]initWithNibName:@"AlertsView" bundle:[NSBundle mainBundle]];
    UINavigationController *alertsNavController = [[UINavigationController alloc] initWithRootViewController:alertsController];
    alertsNavController.navigationBar.barStyle = UIBarStyleBlackOpaque;
    alertsNavController.view.frame = alertsView.frame;
    [alertsNavController.topViewController  viewDidLoad];
    [alertsNavController.topViewController  viewWillAppear:YES];
    [self.view addSubview:alertsNavController.view];
}
هل كانت مفيدة؟

المحلول

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

بدلاً من ذلك ، يجب أن تحصل على NavController للتطبيق عبر مندوب التطبيق.

YourAppDelegate *del = (YourAppDelegate *)[UIApplication sharedApplication].delegate;
[del.navigationController pushViewController:nextViewController animated:YES];

أنت تستخدم Singleton الخاص بـ UIApplication الخاص بك (يحتوي على جميع أنواع المعلومات الجيدة حول تطبيقك) ، والتي تحتوي على خاصية مخصصة تشير إلى AppDelegate ، والتي تحتوي على إشارة إلى NavigationController.

هذه هي الطريقة التي يقوم بها قالب XCode "تطبيق" تطبيق "تطبيق" NavController ، على أي حال. ymmv إذا قمت بتدحرجك-على الرغم من أنك فعلت ، ربما لن تحتاج إلى طرح هذا السؤال.

نصائح أخرى

يمكنك استخدام instruccion المتابعة:

[(UINavigationController *)self.view.window.rootViewController pushViewController:vc animated:YES];

إنه يعمل بالنسبة لي: د

إلقاء نظرة على uiviewController's NavigationController و TabbarController خصائص. هذه ستعيد NavigationController أو TabBarController المقابل الذي ينتمي إليه UiviewController المعطى.

لذلك يمكنك أن تفعل شيئًا مثل:

[customController.navigationController pushViewController:newController animated:YES];
// Similarly for tabBarController ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top