navigationController равен нулю, когда нажимаем viewcontroller - PullRequest
0 голосов
/ 24 апреля 2018

Есть три viewController, MainViewController ViewControllerB и 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 нажмите кнопку ViewController C. но navigationController - это nil. Это не может толкать ViewControllerC

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

1 Ответ

0 голосов
/ 24 апреля 2018
  1. У вас есть MainViewController ( mvc ), который встроен в NavigationController ;

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...