navigationController равен нулю, когда нажимаем viewcontroller

Есть три viewController, MainViewControllerViewControllerB а также ViewControllerC, MainViewController будет загружен при запуске приложения.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];

    MainViewController * main = [[MainViewController alloc]init];
    UINavigationController * navigationController = [[UINavigationController alloc]initWithRootViewController:main];
    self.window.rootViewController = navigationController;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    return YES;       
}

и есть button на MainViewController, подарок ViewControllerB,

UIViewController *rootViewController = [[UIApplication sharedApplication].keyWindow rootViewController];
ViewControllerB * vcb=[[ViewControllerB alloc] init];
[rootViewController presentViewController:vcb animated:YES completion:nil];

После ViewControllerB появляются, нажмите кнопку нажать ViewControllerC. но navigationController является nil, Это не может подтолкнуть ViewControllerC

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

1 ответ

Решение
  1. У вас есть MainViewController (mvc), который встроен в NavigationController;

  2. Затем на MVC у вас есть следующий код:

    [rootViewController presentViewController:vcb animated:YES completion:nil];

    Ты звонишь presentViewController на текущем ViewController, который будет модально представлять следующий ViewController, в этом случае ViewControllerB (vcb);

  3. Наконец, вы пытаетесь получить доступ к NavigationController внутри ViewControllerB (vcb), чтобы нажать ViewControllerC (vcc), с помощью следующего кода:

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

Проблема в том, что vcb не знает о NavigationController, так как presentViewController представляет контроллер представления модально, вне существующего стека навигации. Таким образом, в результате нулевой NavigationController в vcb.

Вы можете обратиться к https://stackru.com/a/14233252/9323816 для получения дополнительной информации.

Другие вопросы по тегам