【问题标题】:How do I add a Back Button to the Navigation Bar through Storyboard?如何通过情节提要向导航栏添加后退按钮?
【发布时间】:2015-03-24 12:46:45
【问题描述】:

我现在很困惑。我在网上到处都能看到添加自定义后退按钮的教程,但我什至似乎都无法使用默认按钮。

在我的 MainViewController 中,我有 performSegueWithIdentifier(...),然后在另一端,我希望导航栏的左侧有后退按钮。如何实现这一目标?我似乎无法在网上找到任何教程。我尝试过使用 UINavigationController,每当我将情节提要中的“导航项”拖到导​​航栏时,我的标题就会被替换,并且仍然没有后退按钮。

如何添加默认的后退按钮?

【问题讨论】:

  • 您应该能够在选择UINavigationItem 时在检查器菜单中编辑其标题。否则,如果您已将视图正确嵌入到 UINavigationController 中,则应自动生成后退按钮。
  • UINavigationItem 更改了我的标题,似乎没有办法在任何检查器菜单中选择按钮类型。我不确定如何正确嵌入 UINavigationController
  • 你没有在菜单中看到this
  • 我愿意,但我在后退按钮上写的东西都不起作用。
  • 当您将新的视图控制器推送到导航控制器(通过代码或转场)时,默认情况下会出现后退按钮。向我们展示您的故事板图片,以便我们可以看到您正在做什么以及您用来推送新视图控制器的任何代码(在最小示例中应该不需要)。

标签: ios uinavigationcontroller uistoryboard uistoryboardsegue


【解决方案1】:

正如您在问题中所说:“我尝试使用 UINavigationController,每当我将情节提要中的“导航项”拖到导​​航栏时,我的标题就会被替换,但仍然没有后退按钮。”

如果您将“导航项”拖到导​​航栏上,您将得到您所描述的行为——您的“导航项”将用作标题,而不是用作按钮。要在情节提要的导航栏中添加自定义后退按钮,而不是向导航栏中添加“导航项”,您需要添加“条形按钮项”。

【讨论】:

  • 尽管投了反对票,但这回答了 OP 的问题。我认为其他发帖人和评论者使问题复杂化了。
  • 好吧..我希望我仍然有帮助:)
  • @JoshGafni 似乎你帮助 OP 更好地理解了一些事情,所以你的回答非常有帮助
  • @narner 我明白了...我认为大多数访问此线程的人并不理解问题的措辞方式。一开始我什至难以理解。
【解决方案2】:

默认的后退按钮是……默认的:)。我会给你一个简单的例子。使用单一视图创建一个新项目。进入故事板,单击单个视图控制器,然后转到菜单中的编辑器 -> 嵌入 -> 导航控制器。您现在将看到 2 个视图控制器 - 一个是导航控制器,第二个是原始视图控制器。您会注意到 Navigation Controller 现在是应用程序的初始视图,并且会有一条线连接 segue,表示视图控制器是导航控制器的根视图控制器。然后在原始视图控制器旁边添加另一个 UIViewController(通过拖放)。现在您将拥有 3 个视图控制器、导航控制器、原始视图控制器和新视图控制器。在原始视图控制器的左上角添加一个 UIButton。然后控制从按钮拖动到新的视图控制器并选择显示segue。如果您现在尝试在模拟器中运行应用程序,您将首先看到原始视图控制器。点击按钮,您将看到带有后退按钮的新视图控制器!您无需尝试即可获得返回按钮——因为它是默认设置。

编辑

基于 cmets,目标是如果用户登录则直接进入 MainViewController,如果用户未登录则进入 LogInViewController。

为从 LogInViewController 到 MainViewController 的推送 segue 提供一个标识符,方法是转到大纲,选择 segue,转到身份检查器,并给它一个标识符。在 LogInViewController 的 ViewDidAppear 中检查用户是否已登录。如果是,则执行 segue。这会将 MainViewController 上的后退按钮提供给 LogInView 控制器。

在我的应用中,我做的事情略有不同。

替代方案:我将 LogInViewController 设置为应用程序的初始视图控制器,但不将其嵌入 UINavigationController。然后我将 MainViewController 添加到故事板并将其嵌入到导航控制器中。我建议将它嵌入到导航控制器中,以防你有其他想要显示的视图并且有一个返回到 MainViewController 的按钮。将 UIButton 添加到 LogInViewController 并控制现在从它拖动到导航控制器。选择当前的模态segue。在情节提要的大纲中选择 segue,并在属性检查器中为其命名,例如“present MainViewController”。在 LogInViewController 的 ViewDidAppear 方法中,检查用户是否已登录,如果是,则调用 [self performSegueWithIdentifier:@"present MainViewController" sender:nil]; 如果用户已登录,则会显示 MainViewController,否则不会。 MainViewController 中不会有后退按钮,因为它是以模态方式呈现的 Navigation Controller 的根视图控制器。如果你想让左上角的按钮成为注销用户的按钮,你可以在 MainViewController 的左侧添加一个 UIBarButton。现在转到 LogInViewController 代码并添加 - (IBAction) nameOfUnwindSegue : (UIStoryboardSegue *) segue{} 回到情节提要并控制从该条形按钮拖动到情节提要中视图控制器顶部的退出图标。选择 nameOfUnwindSegue(您可以随意命名)。这会创建一个 unwind segue,它将关闭视图控制器。您可以通过在情节提要中单击它来给出一个标识符,转到属性检查器,然后给它一个标识符“在 MainViewController 的 prepareForSegue 方法中,您可以检查 segue.identifier 是否等于标识符,如果是,则调用注销方法。

【讨论】:

  • 所以,我有一个 LoginRegisterViewController 进入 MainViewController。我希望它成为我的 NavigationController 的 RootViewController。从那里,我进入我想要返回按钮的控制器。在故事板中,我将如何正确连接导航控制器视图?
  • 正如我上面描述的那样;但是,您必须告诉故事板,我所说的“原始”和“新”UIViewController 不仅仅是 UIViewController,而是 UIViewController 的子类。假设您已经创建了继承自 UIViewController 的 LoginRegisterViewController 和 MainViewController 文件,您所要做的就是单击原始视图控制器,单击身份检查器,而不是类 ViewController,将其更改为 LoginRegisterViewController。单击新的视图控制器并对 MainViewController 执行相同操作。
  • 我不希望 LoginRegisterViewController 成为堆栈的一部分。有没有办法从 MainViewController 启动它。
  • 如果用户已经登录并且还可以注销并返回 LogINViewController,您的目标是基本上直接进入 MainViewController 吗?我之所以这样问,是因为在没有看过屏幕的情况下向用户显示后退按钮有点刺耳。但我假设他们在某个时候登录过?
  • 如果用户没有登录,他们会得到 LoginRegisterViewController。如果他们已登录,我会绕过 LoginRegisterViewController 并直接进入 MainViewController。我不希望 MainViewController 有后退按钮。事实上,这可能是唯一需要后退按钮的 ViewController,所以也许 UINavigationController 是矫枉过正,但是即使没有 UINavigationController,ViewControllers 是否仍然堆叠?
猜你喜欢
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多