使用左侧的标准箭头在UINavigationBar上创建自定义左后卫按钮

Erz*_*iel 21 objective-c uinavigationbar ios

当我创建自定义后退按钮时,我使用以下代码:

    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]initWithTitle:@"Yeah" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonPressed:)];
self.navigationItem.leftBarButtonItem = leftButton;
Run Code Online (Sandbox Code Playgroud)

这工作正常,我得到了这个结果:

后面按钮通常是

我会得到相同的结果,但左边有一个箭头,就像这样(当它是一个标准的后退按钮,而不是一个自定义的按钮):

标准后退箭头的屏幕截图,后跟单词

我怎么能简单地添加这个箭头?

Erz*_*iel 30

最后,这里是我用来与标准左箭头定义后退按钮标题中的片段在当前视图,而不是在父视图:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self setTitle:@"Current View"];

    // Get the previous view controller
    UIViewController *previousVC = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count - 2];

    // Create a UIBarButtonItem
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"FooBar" style:UIBarButtonItemStyleBordered target:self action:@selector(yourSelector)];

    // Associate the barButtonItem to the previous view
    [previousVC.navigationItem setBackBarButtonItem:barButtonItem];
}
Run Code Online (Sandbox Code Playgroud)

这是结果:

在此输入图像描述

注:但是,因为它无法在backBarButtonItem添加一个动作,你可以参考这个伟大的职位,如果你想让它.

更新了Swift

// Prev - no chevron...
//navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back !", style: .plain, target: self, action: #selector(backPressed))

// adds the chevron
let vc = navigationController?.viewControllers.first
let button = UIBarButtonItem(title: "Go Back", style: .plain, target: self, action: #selector(backPressed))
vc?.navigationItem.backBarButtonItem = button
Run Code Online (Sandbox Code Playgroud)

  • 动作有效吗?我正在尝试此方法,但是没有为我执行该操作。iOS 11.4。 (2认同)

Bla*_*nny 17

最简单的方法是在父控制器中设置标题(即您要导航回的控制器).如果您不希望它与该VC视图中显示的实际标题相同,您可以将viewWillDisappear中的标题更改为您在下一个VC的后退按钮上所需的标题,然后将其更改回您想要的内容. viewWillAppear中的父级.

如果您使用的是故事板,您也可以直接在IB中设置后面的标题.

最后,为了创建自定义后退按钮,您可以执行以下操作:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Details" style:UIBarButtonItemStyleBordered target:nil action:nil];
Run Code Online (Sandbox Code Playgroud)

...确保在演示(或父级)视图控制器中执行此操作,而不是正在加载的视图控制器(显示的控制器).

  • 但是,我认为指定在使用backBarButtonItem而不是leftBarButtonItem时无法设置动作是有用的... (6认同)