ios - navigationController 为 nil,当推送 viewcontroller 时

标签 ios xcode navigationcontroller

一共有三个viewControllerMainViewControllerViewControllerBViewControllerCMainViewController 将在应用启动时加载。

- (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;       
}

MainViewController上有一个button, present ViewControllerB,

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

ViewControllerB出现后,点击按钮push ViewControllerC。 但是 navigationControllernil。它无法推送 ViewControllerC

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

最佳答案

  1. 您有 MainViewController (mvc),它嵌入在 NavigationController 中;

  2. 然后,在 mvc 上,您有以下代码:

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

    您正在当前 ViewController 上调用 presentViewController,它将模态呈现下一个 ViewController,在本例中为 ViewControllerB (vcb);

  3. 最后,您尝试访问 ViewControllerB (vcb) 中的 NavigationController 以推送 ViewControllerC (vcc),使用以下代码:

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

问题是 vcb 不知道 NavigationController,因为 presentViewController 在现有导航堆栈之外以模态方式呈现 View Controller 。因此,在 vcb 中产生一个 nil NavigationController

可以引用https://stackoverflow.com/a/14233252/9323816获取更多信息。

关于ios - navigationController 为 nil,当推送 viewcontroller 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50001505/

相关文章:

iphone - 加速度计移动的距离

ios - 快速迭代 JSON

ios - Swift - 动态改变 UIButton 的大小

ios - 删除少数 View Controller 的导航栏边框

ios - 一个 View Controller 中具有不同重用单元格的两个 Collection View

将多个 ViewController 推送到 NavigationController 堆栈时的 iOS 委托(delegate)问题

ios - 使 UIImageView 及其 UIImage 按比例缩放而无需额外填充

xcode - 我的 "Target"是什么?如何向其中添加文件以进行单元测试?

ios - 在 iOS 上进行 segue 时将元素保留在导航 Controller 中

ios - 通过代码以模态形式使用 segue