显示带有返回按钮的导航控制器
Posted
技术标签:
【中文标题】显示带有返回按钮的导航控制器【英文标题】:Show Navigation Controller With Back Button 【发布时间】:2016-08-26 23:03:26 【问题描述】:我正在尝试以编程方式显示我已经编写好的视图,并给它一个后退按钮,以便用户可以轻松地弹回我当前的视图。这是我可以使用的唯一代码,但它没有显示后退按钮!
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];
我尝试在上面的代码中使用“根”视图控制器初始化导航控制器,然后通过 pushViewController 推送“控制器”视图控制器。当我尝试使用带有编辑堆栈跟踪的“根”进行初始化时,这会崩溃。
如何以编程方式打开带有返回按钮的视图到当前视图?
我在 *** 上到处查看,但没有解决这个微妙的场景。请帮忙!
【问题讨论】:
【参考方案1】:-
您不应使用
presentViewController:
,而应使用
pushViewController:
你应该推送你的 viewController
想要从当前在屏幕上的 viewController 呈现,
并且有 navigationController。
可能您的 UIWindow 对象的 rootViewController 应该是 navigationController,而该 navigationController 的 rootViewController 应该是您要从中推送的 viewController。
【讨论】:
我唯一的问题是您的答案要求我当前的视图位于导航视图控制器中。 #2 不在我们的设计中。对于我所在的视图,我不需要导航控制器,但是要呈现的视图需要导航控制器,以便它们可以返回原始页面。【参考方案2】:要首先添加导航控制器,您必须将其放入您的 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];
如果你想从那个视图返回,你可以简单地通过弹出视图来实现(如果你的后退按钮):-
[self.navigationController popViewControllerAnimated:YES];
【讨论】:
我遇到的问题是我不希望我正在查看的视图位于导航控制器中。我只需要将导航控制器添加到要更改的视图中,以便他们可以单击后退按钮返回到没有导航栏的控制器。【参考方案3】:您的代码是正确的,只需在您的 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:^
];
【讨论】:
【参考方案4】:到目前为止,最简单的做法是将我正在使用的视图嵌入到导航控制器中。在 Interface builder 中,单击视图,然后转到 Editor -> Embed -> Navigation Controller。
从这里,很容易将导航栏本身隐藏在 -(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];
【讨论】:
以上是关于显示带有返回按钮的导航控制器的主要内容,如果未能解决你的问题,请参考以下文章