显示带后退按钮的导航控制器

Show Navigation Controller With Back Button

我正在尝试以编程方式显示我已经编码的视图,并给它一个后退按钮,以便用户可以轻松地返回到我的当前视图。这是我唯一可以使用的代码,但它没有显示后退按钮!

UIStoryboard *storyboard = self.storyboard;
UIViewController *root = [[[UIApplication sharedApplication] keyWindow] rootViewController];

UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"Privacy"];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];

navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;

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

我尝试在上面的代码中使用 "root" viewController 初始化 navigationController,然后通过 pushViewController 推送 "controller" 视图控制器。当我尝试使用带有编辑堆栈跟踪的 "root" 初始化时,这会崩溃。

如何以编程方式打开带有返回按钮的视图到当前视图?

我在 Whosebug 上到处查看,但没有解决这种微妙的情况。请帮忙!

  1. 您不应使用 presentViewController:,而应使用 pushViewController:
  2. 你应该推送 viewController 你 想要展示,来自当前屏幕上的 viewController, 并且有 navigationController.
  3. 可能您的 UIWindow 对象的 rootViewController 应该是 navigationController,而该 navigationController 的 rootViewController 应该是您要从中推送的 viewController。

要先添加导航控制器,您必须将其放入 AppDelegate.m

UIStoryboard *sb=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc=[sb instantiateViewControllerWithIdentifier:@"View1"];

UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:vc];
self.window.rootViewController=nav;

如果你想在点击按钮或其他东西时推送视图,你可以通过以下方式实现:-

[self.navigationController pushViewController:ViewName animated"YES];

如果你想从那个视图return你可以简单地通过弹出视图来实现(如果你的后退按钮):-

[self.navigationController popViewControllerAnimated:YES];

您的代码是正确的,只需在 PrivacyViewController

中创建自定义后退按钮

viewDidLoad

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow"] style:UIBarButtonItemStylePlain target:self action:@selector(goPrevious)];

方法如下:

- (void)goPrevious {

    [self dismissViewControllerAnimated:TRUE completion:^{

    }];
}

到目前为止,这里最简单的事情就是将我正在使用的视图嵌入到导航控制器中。在界面构建器中,单击视图,然后转到编辑器 -> 嵌入 -> 导航控制器。

从这里开始,很容易将导航栏本身隐藏在 -(void)viewWillAppear:animated:

- (void)viewWillAppear:(BOOL)animated {
    //Hide the nav bar for the onboarding screens.
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}

下面是使用自动填充后退按钮转到另一个页面的代码:

UIStoryboard *storyboard = self.storyboard;
UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:identifier];
[[self navigationController] pushViewController:controller animated:YES];
[[self navigationController] setNavigationBarHidden:NO animated:YES];