如何设置导航栏的后退项

Posted

技术标签:

【中文标题】如何设置导航栏的后退项【英文标题】:How to set navigation bar's back item 【发布时间】:2016-09-14 08:36:57 【问题描述】:

我有一个导航栏,它是从另一个视图控制器模态显示的,所以后面的项目不显示,

我需要交叉溶解到第二个视图控制器,并在其上放置一个导航栏而不在第一个视图控制器上放置导航栏,在第二个视图控制器的导航栏上,后退按钮应该看起来与系统后退按钮完全相同。

【问题讨论】:

【参考方案1】:

如果你有导航栏并且需要自定义返回按钮,你可以这样添加:

let button = UIBarButtonItem(title: "Back Title", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(someMethod))
self.navigationItem.leftBarButtonItem = button

在您的选择器中,您可以关闭当前的 viewController 或调用其他一些返回方法

编辑

如果您需要一些具有标准推送过渡样式的自定义动画,您可以执行以下操作:

例如在情节提要中使用SecondViewController id 创建viewController

在你的转换动作方法中做一些这样的:

func showSecondViewController() 
    guard navigationController != nil else 
        return
    
    guard let secondViewController = storyboard?.instantiateViewControllerWithIdentifier("SecondViewController") else 
        return
    
    navigationController!.pushViewController(secondViewController, animated: false)
    UIView.transitionWithView(navigationController!.view, duration: 1, options: .TransitionCrossDissolve, animations: nil, completion: nil)

【讨论】:

是啊这个加了一个按钮,不过不像系统< Back的风格,看着很奇怪 @BrightFuture Show 模态并不暗示标准后退按钮的存在。在这种情况下,您需要一个简单地关闭窗口的按钮 我需要模态显示的交叉溶解动画,如果我使用push,我可以更改默认动画吗? @BrightFuture 我编辑了答案。尝试这样做,也许它会帮助你得到想要的结果 这个方法应该放在prepareForSegue吗?【参考方案2】:

当你推送一个 ViewController 时,后面的项目会自动出现。当您以模态方式呈现它时,您会在初始导航控制器之外执行它,因此它的导航将被新的导航隐藏。

建议解决方案的版本:将第一个 UIViewController 嵌入 UINavigationViewController 并推送第二个而不是模态显示它。

【讨论】:

这似乎不是一个解决方案,也许你应该评论一下? 现在是一个解决方案。后退按钮是属于导航控制器的控件,如果不使用导航则必须自己重新创建后退按钮。 是的,这是一个解决方案,但我需要通过模态呈现交叉溶解动画 也许this WWDC 视频可以帮助您解决这个问题。

以上是关于如何设置导航栏的后退项的主要内容,如果未能解决你的问题,请参考以下文章

处理来自操作栏的向上导航,如后退导航。如何?

如何完全覆盖导航栏的后退按钮操作?

辅助功能将焦点设置到导航栏标题项

设置 uinavigationitem 的后退按钮不起作用

如何在导航栏的标题项上添加专辑选择器视图

如何以编程方式设置导航栏的标题?