UINavigationController 没有正确推送

Posted

技术标签:

【中文标题】UINavigationController 没有正确推送【英文标题】:UINavigationController not pushing correctly 【发布时间】:2013-04-27 17:47:22 【问题描述】:

我正在尝试以编程方式导航一些视图控制器。我已经在头文件中添加了 UINavigationControllerDelegate ......但是当我点击按钮时视图没有推出......谁能告诉我做错了什么???

    -(void)nextPage
    
        NSLog(@"1234");
        infoViewController* info = [[infoViewController alloc] init];
        [self.navigationController pushViewController:info animated:YES];
        info = nil;
    

    - (void)viewDidLoad
    
        [super viewDidLoad];
        self.navigationController.delegate = self;
        startFutureView = [[UIView alloc] initWithFrame:CGRectMake(160, 0, 320, 548)];
        startFutureView.backgroundColor = [UIColor redColor];
        [self.view addSubview:startFutureView];


        startPastView = [[UIView alloc] initWithFrame:CGRectMake(-160, 0, 320, 548)];
        startPastView.backgroundColor = [UIColor blueColor];
        [self.view addSubview:startPastView];

        startInfoBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        startInfoBtn.frame = CGRectMake(80, 137, 180, 180);
        [startInfoBtn addTarget:self action:@selector(nextPage)                         forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:startInfoBtn];

// Do any additional setup after loading the view, typically from a nib.
    

【问题讨论】:

更改 nslog 以记录 self.navigationController。是零吗? 仅仅将 navcontrollerdelegate 添加到头文件是不够的。您是否创建了 navigationController 的实例?它是否分配给窗口的 rootViewController?如果您尝试推送的 viewController 不是 UINavigationController 的 rootviewcontroller,则不会发生任何事情。添加更多关于 AppDelegate 和 ViewController 的代码会有所帮助 【参考方案1】:

无需遵循UINavigationControllerDelegate 即可推送视图控制器。我猜你的 navigationController 是零。

原因是您使用的是普通视图控制器,但您需要做的是创建视图控制器,然后将其包装在导航控制器中。例如,假设您现在以模态方式呈现 viewController:

UIViewController *viewController = [[UIViewController alloc] init];

[self presentViewController:viewController animated:YES completion:nil];

这样做意味着 viewController 没有导航控制器,所以你需要这样做:

UIViewController *viewController = [[UIViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

[self presentViewController:navigationController animated:YES completion:nil];

【讨论】:

以上是关于UINavigationController 没有正确推送的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 没有导航栏?

如果 UINavigationController 在第一个故事板中,有没有办法在第二个故事板中显示 UINavigationController?

UIViewController 呈现 UINavigationController - 没有导航栏?

UINavigationController 没有推送/显示视图

UINavigationController 没有正确推送

TableView 没有响应 UINavigationController 中的“编辑”按钮