UINavigationController 不显示后退按钮

Posted

技术标签:

【中文标题】UINavigationController 不显示后退按钮【英文标题】:UINavigationController not showing back button 【发布时间】:2012-10-18 18:30:00 【问题描述】:

我有一个带有 UIViewController 和一些按钮的故事板。其中一个按钮对 UINavigationController 进行模态搜索,并且 NavController 中嵌入了 UITableViewController。当我单击主屏幕上的按钮时,它会前进到 NavController,但没有返回按钮。

那么我如何获得后退按钮?我尝试了几件事,但没有运气。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

如果您以模态方式呈现导航控制器,那么 tableview 控制器是您的新导航控制器推送的唯一视图控制器。在这种情况下不会也不应该有后退按钮。

您最好通过 tableview 控制器向导航栏添加一个取消/完成按钮,这会关闭模态视图。

在您的 tableView 控制器viewDidLoad: 方法中:

UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonTapped:)];
self.navigationItem.leftBarButtonItem = done;

//Release done if not using ARC

然后添加(最简单的实现)一个dismiss方法:

- (void)doneButtonTapped:(id)sender 

    [self.navigationController dismissViewControllerAnimated:YES completion:nil];


【讨论】:

是的,那会很好用。实际上,我想要一个主页按钮,用这些按钮将用户带回他们的主屏幕。甚至可能是家的形象。【参考方案2】:

一个 UINavigationViewController 只管理一堆视图控制器。您将 viewController 压入堆栈,当您点击“返回”时,您将从堆栈中弹出一个视图。

由于您以模态方式呈现 UINavigationController,因此它不知道之前呈现的内容。获得所需行为的正确方法是将主 UIViewController 设置为 UINavigationController 的根视图控制器。当用户点击一个按钮时,您将新的 UITableViewController 推送到 UINavigationController 的堆栈中。

【讨论】:

我想我明白了,但是如果我的 UIViewComtroller 上有很多按钮,这会起作用吗?我将有几个按钮,每个按钮的作用都略有不同。 它应该可以工作,前提是您正确设置了 MVC 设计。根据按下的按钮,您将推送不同的视图控制器或使用不同的数据初始化一个通用视图控制器。 好的,以确保我理解正确。我应该更改我的 UIViewController 以使 UINavController 成为根视图控制器。但是如何让导航控制器显示 tableviewcontroller? 首先:声明你的viewController,但不要将它设置为你窗口的rootViewController。第二:创建一个 UINavigationController 并使用 -initWithRootViewController: 方法并传入您的 viewController。将其设置为窗口的根目录。当一个按钮被点击时,使用 [self.navigationController pushViewController:animated:] 来推送你的新视图控制器。【参考方案3】:

您的 UITableViewController 子类是 UINavigationController 的根视图控制器。因此,不会自动显示后退按钮。如果点击表格行将第二个视图控制器推入堆栈,那么第二个视图控制器将在其导航栏中显示一个后退按钮。所以,这是预期的行为。

您可以通过创建一个“后退”按钮自己添加一个“后退”按钮(您需要一个看起来像后退按钮的图像,或者在代码中绘制一个)并将其添加为 TableViewController 的导航项的 leftBarButtonItem,但我不会不要那样做。模态显示的视图控制器不应该“返回”。相反,按钮应该是“关闭”、“关闭”或“取消”之类的东西。

【讨论】:

【参考方案4】:

在我的例子中,我有一个没有可见导航栏的 rootviewcontoller,但推送的 viewcontoller 都需要一个带有后退按钮的导航栏,但它们没有显示。我在 Xcode 6.1 中工作。在 rootviewcontroller 的 viewDidAppear 中,我设置:

self.title=@"一个标题"; self.navigationController.navigationBarHidden=YES;

在需要导航栏可见的推送视图控制器的 viewDidLoad 中,我设置: self.navigationController.navigationBarHidden=NO; self.navigationItem.hidesBackButton=否;

这一切似乎有点明显,但我绕着圈子试图用后退按钮显示导航栏!

【讨论】:

以上是关于UINavigationController 不显示后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

使用 p 值逐步回归以删除 p 值不显着的变量

调用泛型方法而不显式指定类型参数

Qt - 如何在不显式实现线程的情况下同时运行两个插槽

在数据框中合并两个熊猫系列而不显式使用键

python 调用父类方法, 重写父类构造方法, 不显式调用,会报错

在 MongoDB 中搜索任何字段的值而不显式命名它