我现在非常困惑。在网上我到处都看到了添加自定义后退按钮的教程,但我似乎无法获得默认的按钮。
在我的MainViewController中,我有performSegueWithIdentifier(...)
,然后在另一端,我希望导航栏在左侧有后退按钮。如何实现这一目标?我似乎无法在线找到任何教程。我尝试过使用UINavigationController,每当我拖动"导航项目"在故事板直到导航栏,我的标题被替换,仍然没有后退按钮。
如何添加默认后退按钮?
答案 0 :(得分:6)
正如您在问题中所述:"我已经尝试过使用UINavigationController,每当我拖动“导航项目”时在导航栏的故事板中,我的标题被替换,但仍然没有后退按钮。"
如果您拖动"导航项"在导航栏上,您将获得您所描述的行为 - 您的"导航项目"将作为标题,而不是按钮。要在故事板中向导航栏添加自定义后退按钮,而不是添加"导航项"在导航栏中,您需要添加一个"栏按钮项"。
答案 1 :(得分:5)
默认后退按钮是...默认:)。我会给你一个简单的例子。使用单个视图创建新项目。进入故事板,单击单视图控制器,然后转到菜单中的编辑器 - >嵌入 - >导航控制器。您现在将看到2个视图控制器 - 一个是导航控制器,第二个是原始视图控制器。您会注意到导航控制器现在是应用程序的初始视图,并且将有一条连接segue的线,表示视图控制器是导航控制器的根视图控制器。然后在原始View Controller旁边添加另一个UIViewController(通过拖放)。现在,您将拥有3个视图控制器,导航控制器,原始视图控制器和新的视图控制器。在原始视图控制器的左上角添加UIButton。然后控制从按钮拖动到新视图控制器并选择show segue。如果您现在尝试在模拟器中运行应用程序,您将首先看到原始视图控制器。点击按钮,您将看到带有后退按钮的新视图控制器!你甚至不用尝试就会得到后退按钮 - 因为它是默认的。
修改强>
根据评论,目标是在用户登录时直接进入MainViewController,但如果用户未登录则转到LogInViewController。
通过转到大纲,选择segue,转到身份检查器并为其指定标识符,将来自LogInViewController的push segue提供给MainViewController标识符。在LogInViewController的ViewDidAppear中检查用户是否已登录。如果是,则执行segue。这将在MainViewController上为LogInView控制器提供一个后退按钮。
在我的应用中,我做的事情略有不同。
替代方法:我将LogInViewController作为应用程序的初始View Controller,但不要将其嵌入到UINavigationController中。然后我将MainViewController添加到故事板并将其嵌入导航控制器中。我建议将它嵌入导航控制器,以防你想要显示其他视图并有一个MainViewController的后退按钮。将UIButton添加到LogInViewController并控制现在从它拖动到导航控制器。选择当前的模态segue。在故事板的轮廓中选择segue,然后在属性检查器中为其命名,如“present MainViewController”。在LogInViewController的ViewDidAppear方法中,检查用户是否已登录,如果是,则调用[self performSegueWithIdentifier:@"present MainViewController" sender:nil];
如果用户已登录,则会显示MainViewController,但不会出现。 MainViewController中没有后退按钮,因为它是以模态方式呈现的导航控制器的根视图控制器。如果您希望左上角按钮是一个将用户注销的按钮,则可以将UIBarButton添加到MainViewController的左侧。现在转到LogInViewController代码并添加- (IBAction) nameOfUnwindSegue : (UIStoryboardSegue *) segue{}
返回故事板并控制从此栏按钮拖动到故事板中View Controller顶部的退出图标。选择nameOfUnwindSegue(您可以根据需要命名)。这会创建一个解除视图控制器的展开segue。您可以通过在storyboard中单击它来获取标识符,转到属性检查器,并为其指定标识符“在MainViewController中的prepareForSegue方法中,您可以检查segue.identifier是否等于标识符,如果是,请调用注销方法。