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

Ios 显示带后退按钮的导航控制器,ios,objective-c,navigationcontroller,Ios,Objective C,Navigationcontroller,我试图以编程方式显示一个我已经编写好代码的视图,并给它一个后退按钮,以便用户可以轻松地弹出到我的当前视图。这是我唯一可以使用的代码,但它没有显示后退按钮 UIStoryboard *storyboard = self.storyboard; UIViewController *root = [[[UIApplication sharedApplication] keyWindow] rootViewController]; UIViewController *controller = [sto

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

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];
在上面的代码中,我尝试使用“根”viewController初始化navigationController,然后通过pushViewController推送“控制器”视图控制器。当我尝试使用“根”和经过编辑的堆栈跟踪初始化时,这会崩溃

如何使用返回按钮以编程方式打开当前视图的视图

我在stackoverflow上到处都找过了,但这个微妙的场景并没有得到解决。请帮忙

  • 您不应该使用
    presentViewController:
    ,而应该使用
    pushview控制器:
  • 您应该按下所需的viewController 要从当前屏幕上的viewController显示, 它有导航控制器
  • 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];
    
    如果您想从该视图返回,只需弹出视图(以防返回按钮)即可:-


    您的代码是正确的,只需在您的
    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)视图中。视图将显示:动画:

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

    我遇到的问题是,我不希望我所在的视图位于导航控制器内。我只需要将导航控制器添加到我要更改的视图中,这样他们就可以单击“上一步”按钮返回到没有导航栏的conroller。我唯一的问题是,您的答案要求我的当前视图位于导航视图控制器内#2不在我们的设计中。对于我所在的视图,我不需要导航控制器,但是要显示的视图需要导航控制器,以便它们可以返回到原始页面。
    UIStoryboard *storyboard = self.storyboard;
    UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:identifier];
    [[self navigationController] pushViewController:controller animated:YES];
    [[self navigationController] setNavigationBarHidden:NO animated:YES];