navigationController равен нулю, когда нажимаем viewcontroller
Есть три 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 ответ
У вас есть MainViewController (mvc), который встроен в NavigationController;
Затем на MVC у вас есть следующий код:
[rootViewController presentViewController:vcb animated:YES completion:nil];
Ты звонишь
presentViewController
на текущем ViewController, который будет модально представлять следующий ViewController, в этом случае ViewControllerB (vcb);Наконец, вы пытаетесь получить доступ к NavigationController внутри ViewControllerB (vcb), чтобы нажать ViewControllerC (vcc), с помощью следующего кода:
[self.navigationController pushViewController:vcC animated:YES];
Проблема в том, что vcb не знает о NavigationController, так как presentViewController
представляет контроллер представления модально, вне существующего стека навигации. Таким образом, в результате нулевой NavigationController в vcb.
Вы можете обратиться к https://stackru.com/a/14233252/9323816 для получения дополнительной информации.