如何通过情节提要将后退按钮添加到导航栏?
How do I add a Back Button to the Navigation Bar through Storyboard?
我现在很困惑。我在网上到处都能看到添加自定义后退按钮的教程,但我什至无法使用默认按钮。
在我的 MainViewController 中,我有 performSegueWithIdentifier(...)
然后在另一端,我希望导航栏在左侧有后退按钮。如何做到这一点?我似乎无法在线找到任何教程。我试过使用 UINavigationController,每当我将情节提要中的 "Navigation Item" 拖到导航栏时,我的标题就会被替换,并且仍然没有后退按钮。
如何添加默认后退按钮?
默认后退按钮是...默认 :)。我会给你一个简单的例子。使用单一视图创建一个新项目。进入故事板,单击单一视图控制器,然后转到菜单中的编辑器 -> 嵌入 -> 导航控制器。您现在将看到 2 个视图控制器 - 一个是导航控制器,第二个是原始视图控制器。你会注意到 Navigation Controller 现在是应用程序的初始视图,并且会有一条线连接 segues,表明视图控制器是导航控制器的根视图控制器。然后在原始视图控制器旁边添加另一个 UIViewController(通过拖放)。现在您将拥有 3 个视图控制器、导航控制器、原始视图控制器和新视图控制器。在原始视图控制器的左上角添加一个 UIButton。然后控制从按钮拖动到新的视图控制器和 select 显示 segue。如果您现在在模拟器中尝试 运行 该应用程序,您将首先看到原始视图控制器。点击按钮,您将看到带有返回按钮的新视图控制器!您甚至无需尝试即可获得后退按钮 - 因为它是默认设置。
编辑
根据评论,目标是如果用户已登录则直接转到 MainViewController,但如果用户未登录则转到 LogInViewController。
通过转到大纲,为从 LogInViewController 到 MainViewController 的推送 segue 提供一个标识符,selecting segue,转到身份检查器,并为其提供一个标识符。在 LogInViewController 的 ViewDidAppear 中检查用户是否已登录。如果是,则执行 segue。这会将 MainViewController 上的后退按钮提供给 LogInView 控制器。
在我的应用程序中,我做的事情略有不同。
备选方案:我将 LogInViewController 作为应用程序的初始视图控制器,但不将其嵌入到 UINavigationController 中。然后我将 MainViewController 添加到故事板并将其嵌入到导航控制器中。我建议将它嵌入到导航控制器中,以防您有其他想要显示的视图并且有一个指向 MainViewController 的后退按钮。将 UIButton 添加到 LogInViewController 并控制现在从它拖动到导航控制器。 Select 现在模态转场。 Select 故事板大纲中的 segue,并在属性检查器中为其命名,如 "present MainViewController"。在 LogInViewController 的 ViewDidAppear 方法中,检查用户是否已登录,如果已登录,则调用 [self performSegueWithIdentifier:@"present MainViewController" sender:nil];
如果用户已登录,则将显示 MainViewController,否则不会。 MainViewController 中不会有后退按钮,因为它是模态呈现的导航控制器的根视图控制器。如果你想让左上角的按钮是一个注销用户的按钮,你可以在MainViewController的左侧添加一个UIBarButton。现在转到 LogInViewController 代码并添加 - (IBAction) nameOfUnwindSegue : (UIStoryboardSegue *) segue{}
返回故事板并控制从该栏按钮拖动到故事板中视图控制器顶部的退出图标。 Select nameOfUnwindSegue(你可以随意命名)。这会创建一个 unwind segue,它将关闭视图控制器。您可以通过在情节提要中单击它来提供标识符,转到属性检查器,并为其提供标识符“在 MainViewController 的 prepareForSegue 方法中,您可以检查 segue.identifier 是否等于标识符,如果是,调用注销方法。
正如您在问题中所述:"I've tried having a UINavigationController, and whenever I drag the 'Navigation Item' in the storyboard up to the Navigation Bar, my title gets replaced and there still isn't a back button."
如果您将 "Navigation Item" 拖到导航栏上,您将得到与您描述的完全相同的行为 - 您的 "Navigation Item" 将用作 title,而不是 按钮 。要将自定义后退按钮添加到情节提要中的导航栏,而不是将 "Navigation Item" 添加到导航栏,您需要添加 "Bar Button Item".
我现在很困惑。我在网上到处都能看到添加自定义后退按钮的教程,但我什至无法使用默认按钮。
在我的 MainViewController 中,我有 performSegueWithIdentifier(...)
然后在另一端,我希望导航栏在左侧有后退按钮。如何做到这一点?我似乎无法在线找到任何教程。我试过使用 UINavigationController,每当我将情节提要中的 "Navigation Item" 拖到导航栏时,我的标题就会被替换,并且仍然没有后退按钮。
如何添加默认后退按钮?
默认后退按钮是...默认 :)。我会给你一个简单的例子。使用单一视图创建一个新项目。进入故事板,单击单一视图控制器,然后转到菜单中的编辑器 -> 嵌入 -> 导航控制器。您现在将看到 2 个视图控制器 - 一个是导航控制器,第二个是原始视图控制器。你会注意到 Navigation Controller 现在是应用程序的初始视图,并且会有一条线连接 segues,表明视图控制器是导航控制器的根视图控制器。然后在原始视图控制器旁边添加另一个 UIViewController(通过拖放)。现在您将拥有 3 个视图控制器、导航控制器、原始视图控制器和新视图控制器。在原始视图控制器的左上角添加一个 UIButton。然后控制从按钮拖动到新的视图控制器和 select 显示 segue。如果您现在在模拟器中尝试 运行 该应用程序,您将首先看到原始视图控制器。点击按钮,您将看到带有返回按钮的新视图控制器!您甚至无需尝试即可获得后退按钮 - 因为它是默认设置。
编辑
根据评论,目标是如果用户已登录则直接转到 MainViewController,但如果用户未登录则转到 LogInViewController。
通过转到大纲,为从 LogInViewController 到 MainViewController 的推送 segue 提供一个标识符,selecting segue,转到身份检查器,并为其提供一个标识符。在 LogInViewController 的 ViewDidAppear 中检查用户是否已登录。如果是,则执行 segue。这会将 MainViewController 上的后退按钮提供给 LogInView 控制器。
在我的应用程序中,我做的事情略有不同。
备选方案:我将 LogInViewController 作为应用程序的初始视图控制器,但不将其嵌入到 UINavigationController 中。然后我将 MainViewController 添加到故事板并将其嵌入到导航控制器中。我建议将它嵌入到导航控制器中,以防您有其他想要显示的视图并且有一个指向 MainViewController 的后退按钮。将 UIButton 添加到 LogInViewController 并控制现在从它拖动到导航控制器。 Select 现在模态转场。 Select 故事板大纲中的 segue,并在属性检查器中为其命名,如 "present MainViewController"。在 LogInViewController 的 ViewDidAppear 方法中,检查用户是否已登录,如果已登录,则调用 [self performSegueWithIdentifier:@"present MainViewController" sender:nil];
如果用户已登录,则将显示 MainViewController,否则不会。 MainViewController 中不会有后退按钮,因为它是模态呈现的导航控制器的根视图控制器。如果你想让左上角的按钮是一个注销用户的按钮,你可以在MainViewController的左侧添加一个UIBarButton。现在转到 LogInViewController 代码并添加 - (IBAction) nameOfUnwindSegue : (UIStoryboardSegue *) segue{}
返回故事板并控制从该栏按钮拖动到故事板中视图控制器顶部的退出图标。 Select nameOfUnwindSegue(你可以随意命名)。这会创建一个 unwind segue,它将关闭视图控制器。您可以通过在情节提要中单击它来提供标识符,转到属性检查器,并为其提供标识符“在 MainViewController 的 prepareForSegue 方法中,您可以检查 segue.identifier 是否等于标识符,如果是,调用注销方法。
正如您在问题中所述:"I've tried having a UINavigationController, and whenever I drag the 'Navigation Item' in the storyboard up to the Navigation Bar, my title gets replaced and there still isn't a back button."
如果您将 "Navigation Item" 拖到导航栏上,您将得到与您描述的完全相同的行为 - 您的 "Navigation Item" 将用作 title,而不是 按钮 。要将自定义后退按钮添加到情节提要中的导航栏,而不是将 "Navigation Item" 添加到导航栏,您需要添加 "Bar Button Item".