我如何自定义导航返回按钮在iOS 7及以上没有标题?(即只使用箭头)

self.navigationItem.leftBarButtonItem = self.editButtonItem;

我只是想知道它们是否有self。backbuttonitem;

OR

像这样的东西?

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
                   initWithBarButtonSystemItem:UIBarButtonSystemItemBACK 
                   target:self action:@selector(back)];

当前回答

我写了一个扩展,使这更容易:

extension UIViewController {

    /// Convenience for setting the back button, which will be used on any view controller that this one pushes onto the stack
    @objc var backButtonTitle: String? {
        get {
            return navigationItem.backBarButtonItem?.title
        }
        set {
            if let existingBackBarButtonItem = navigationItem.backBarButtonItem {
                existingBackBarButtonItem.title = newValue
            }
            else {
                let newNavigationItem = UIBarButtonItem(title: newValue, style:.plain, target: nil, action: nil)
                navigationItem.backBarButtonItem = newNavigationItem
            }
        }
    }

}

其他回答

iOS6的简单破解也适用于iOS7:

[UIBarButtonItem.appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];

编辑: 不要使用这种方法。详情见评论。

我找到了一个简单的方法,让我的返回按钮与iOS单箭头。

让我们假设你有一个导航控制器从ViewB到ViewA。在IB中,选择ViewA的导航栏,你应该看到这些选项:标题,提示和返回按钮。

ViewA导航栏选项

诀窍是在前一个视图控制器(view A)的选项中选择你的命运视图控制器返回按钮的标题(ViewB)。如果你不填写“返回按钮”选项,iOS将自动将标题“返回”加上前一个视图控制器的标题。因此,您需要用一个空格填充这个选项。

在“返回按钮”选项中填充空格

结果:

其实很简单,我是这么做的:

Objective - C

// Set this in every view controller so that the back button displays back instead of the root view controller name
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];

斯威夫特2

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)

斯威夫特3

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

把这一行放到推送到堆栈(前一个视图控制器)的视图控制器中。新按下的视图控制器返回按钮现在将显示你为initWithTitle所放的任何东西,在本例中是一个空字符串。

你不需要做什么。你可以通过故事板本身来实现同样的效果。

只要到根导航控制器,并给一个空间。记住,返回按钮不是指向你想要的没有标题的控制器,而是指向根导航控制器。

编辑:2014-04-09:当我获得声誉时,我感到抱歉,因为我不再使用这个技巧了。我推荐凯尔的答案。还要注意self。navigationitem。backbarbuttonitem的self不是返回按钮显示的视图控制器,而是要返回的前一个视图控制器。

如果之前的视图控制器不需要标题文本,只需用空白字符串填充标题;

self.navigationItem.title = @"";
[self.navigationController pushViewController:viewController animated:YES];

这将防止在被推送的视图控制器上显示带雪佛龙的“返回”。

编辑:即使你使用非空白标题文本,在viewWillAppear中设置前一个视图控制器的标题:除了标题可以闪烁在闪烁时,视图控制器弹出。我认为“推特应用程序”似乎做了更微妙的hack来避免闪烁。