如何在不覆盖自然后退按钮的情况下添加左栏按钮?

Posted

技术标签:

【中文标题】如何在不覆盖自然后退按钮的情况下添加左栏按钮?【英文标题】:How do I add a left bar button without overriding the natural back button? 【发布时间】:2016-08-22 05:57:22 【问题描述】:

我有一个使用嵌入在导航视图控制器中的 UIViewControllers 的项目,所以每当我进入我的表格视图的任何细节时,都会自动为我设置后退按钮。

现在我想在后退按钮旁边添加一个编辑按钮。我已经在右侧放置了一个取消分配按钮,由于“取消分配”这个词很长,我宁愿将编辑按钮放在左侧的后退按钮旁边。

我知道我可以使用navigationItem.leftBarButtonItem = editButton 以编程方式添加条形按钮,但这会覆盖后退按钮。

我也尝试将 editButton 附加到 navigationItem.leftBarButtonItems 数组,但这也不起作用(因为 leftBarButtonItems 数组首先没有设置)。

我的下一个方法是找到后退按钮并手动将其添加到 leftBarButtonItems 数组中,因此我尝试使用 navigationItem.leftBarButtonItems = [self.navigationItem.backBarButtonItem!, editButton],但这只会在 editButton 和左侧之间添加一个空格。没有返回按钮。

如何在保持后退按钮不变的情况下添加左栏按钮?有没有比使用 self.navigationController?.popViewControllerAnimated(true) 手动编写新的后退按钮并将其添加到 leftBarButtonItems 数组更优雅的方法?

【问题讨论】:

【参考方案1】:

默认情况下,leftItemsSupplementBackButton 属性为false。在这种情况下, 后退按钮未绘制,左侧项目或项目替换它。如果你 希望左边的项目出现在后退按钮之外(而不是代替它)将leftItemsSupplementBackButton设置为true

@property(nonatomic) BOOL leftItemsSupplementBackButton

你可以使用这样的东西

navigationItem.leftBarButtonItem = editButton
//or
navigationItem.leftBarButtonItems = [editButton]

self.navigationItem.leftItemsSupplementBackButton = true

【讨论】:

哦,是的,谢谢!完美的答案,正是我想要的。花了太多时间谷歌搜索却一无所获 XD 当您为某件事而苦苦挣扎并找到完全符合您需求的答案时......在一行中,没有丑陋的解决方法,没有犹豫,只是一个神圣的完美小布尔值。那天你很高兴成为一名开发人员,你热爱你的工作……今天是星期五。谢谢♥【参考方案2】:

这两行可以解决问题。将leftItemSupplementBackButton设置为true,然后添加leftBarButtonsItems

self.navigationItem.leftItemsSupplementBackButton = true
self.navigationItem.leftBarButtonItems = [barButton]

【讨论】:

注意,如果您尝试将新按钮“附加”到 leftBarButtonItems - 它不起作用

以上是关于如何在不覆盖自然后退按钮的情况下添加左栏按钮?的主要内容,如果未能解决你的问题,请参考以下文章

按下导航控制器左栏按钮时如何停止视图消失

如何在不覆盖现有样式的情况下向 WPF 自定义控件添加触发器?

当后退按钮在导航栏中没有标题时,停止左栏按钮向右移动

以编程方式创建的后退按钮没有箭头

iOS导航栏:将左栏按钮从菜单更改为后退

在不刷新的情况下更新 IE10 固定站点的后退/前进按钮的颜色