2015-04-01 93 views
4

我有两个视图控制器,第一个嵌入在导航控制器中。第一个视图中的一个按钮将第二个按钮推到导航堆栈上。大。除了后退按钮仅在第二个视图完成动画到窗口中时才会出现。这将是罚款,除了该视图的标题显示马上:NavigationController后退按钮不会出现,直到加载视图后

enter image description here

enter image description here

这产生了一个元素出现马上和其他在后来才种持久性有机污染物一个奇怪的差异。任何方式让后退按钮立即出现?我正在使用自定义按钮btw:

let backButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: nil) 

navigationItem.backBarButtonItem = backButton 
+0

这里需要一点信息。你如何执行转换(segue挂在故事板/ performSegueWithIdentifier(_ :)'/'pushViewController(_:animated :))?)?你在哪里(代码中)设置'backBarButtonItem'?在我的简短测试中,我只能得到您在'viewDidAppear(_ :)'中设置'leftBarButtonItem'时描述的行为。 – Stuart 2015-04-01 19:25:28

+0

另外,你所描述的用户界面在iOS中有些非惯用。在推送过渡之后,用户通常期望看到带有描述前一个屏幕的文本的向后箭头。你的设置(在左边有一个“取消”按钮)看起来更像是一个模态表示。当然,我不知道应用程序UI的完整流程,但只是认为它值得一提,以防万一。 – Stuart 2015-04-01 19:33:42

+0

是的,我正在研究如何让它更像是从底部向上滑动的模式,然后取消滑动向下。但是,为了理解正常推送过渡发生了什么,我试图找出在此场景中不立即显示的后退按钮。至于我如何执行转换,简单的按钮通过故事板延续到第二个视图。我在第一个视图控制器中创建了自定义后退按钮,但即使使用默认按钮,问题仍然存在,但无论出于何种原因,它都会稍微早一点开始淡入淡出 – 2015-04-01 19:43:37

回答

3

不知道更多的细节,我不确定你描述的行为背后的原因。但是,我会尝试并介绍如何设置这些类型的转换。由于您正在使用故事板,因此非常简单。

在您的故事板中,您将从嵌入导航控制器的视图控制器开始,以及您想要转换到的第二个视图控制器。从你的第一个VC按钮控制拖动到第二个VC场景,并选择一个“显示”动作segue,这将导致导航推送转换 - 我认为这是你配置故事板的方式。

您可以直接在故事板中更改后退按钮标题。选择第一个VC场景并从左侧的文档大纲中选择其导航项目对象。在右侧的属性检查器中,只需将“后退按钮”字段更改为您按下第二个VC时按钮所要表达的内容即可。这将保持用户期望的后退箭头图标。

如果你想使用推转型,但显示正常的前瞻性按钮没有箭头,可以隐藏在你的第二个VC的viewDidLoad()后退按钮:

navigationItem.hidesBackButton = true 

然后,回到你的故事板,拖在第二个VC的导航栏的左侧出一个酒吧按钮项目,并给它一个自定义标题等。

但是,您真正想要的此设置是模式转换,并且这样做很简单在故事板中将您的segue类型更改为“Present Modally”。这将在导航堆栈上方显示第二个VC 以上,因此默认情况下不会显示导航栏。而不是从对象面板拖出一个独立的导航栏(它会给你一些麻烦,试图让它在状态栏下扩展),将你的第二个VC嵌入到它自己的导航控制器中,它会隐式地添加一个导航栏。然后,您可以将一个酒吧按钮项拖出到酒吧的左侧,并通过展开顺序将其钩住,或使用IBAction方法并致电​​3210。

+0

这是一个解释。我修复了我的故事板,现在它工作 – 2016-01-28 15:10:06

相关问题