如何覆盖self.navigationItem.backBarButtonItem操作?

我想覆盖self.navigationItem.backBarButtonItem目标行动

我试过了:

 UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonOverrideAction:)]; [self.navigationItem setLeftBarButtonItem:backButton]; 

它正在工作,但我想使用默认的箭头:

在这里输入图像说明

我也试过:

 UIBarButtonItem *backButton = self.navigationItem.backBarButtonItem; [backButton setTarget:self]; [backButton setAction:@selector(backButtonOverrideAction:)]; 

但不幸的是,它不工作..你有任何想法如何做到这一点?

STILL ,无法直接访问self.navigationItem.backBarButtonItem

我结束了使用第一个我试过…并得到我的(自定义)图像..

 UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"myImage.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonOverrideAction:)]; [self.navigationItem setLeftBarButtonItem:backButton]; 

而…

 //this two lines of code are still useless, i just feel sorry for them.. [self.navigationItem.backBarButtonItem setTarget:<#(id)#>]; [self.navigationItem.backBarButtonItem setAction:<#(SEL)#>]; 

你必须做类似的事情

 self.navigationItem.backBarButtonItem.target = self; self.navigationItem.backBarButtonItem.action = @selector(backButtonAction:); 

在这里你也必须处理控制器的stream行。

您无法更改/分配一个操作backBarButton。 苹果没有给予权限覆盖backBarButton的行动。

1)您可以使用viewdiddisappear方法执行您计划执行的任何事情。 (注意:如果某些情况下视图将会消失,那么它将会被执行,因此请确保这可以在您的场景中应用)

2)你已经尝试过,使用LeftBarButton(如果你想要的图标可以自定义leftBarButton来显示默认的箭头)

您不能分配操作返回BarButton。 解决scheme是创build自定义后退button。

苹果文件摘录说:

为导航项目指定button时,必须使用UIBarButtonItem对象。 如果要在导航栏中显示自定义视图,则必须将这些视图包含在UIBarButtonItem对象中,然后才能将其添加到导航项目中。

这意味着你根本不能使用你的问题的方法-2。 而方法1是正确的做法。

我希望它可以帮助你…

 BOOL IsOK_Clicked; -(void)viewDidAppear:(BOOL)animated { IsOK_Clicked = NO; } -(void)viewDidDisappear:(BOOL)animated { if(!IsOK_Clicked){ //Do what you want in Back Click } } - (IBAction)btnCheckOut:(id)sender { IsOK_Clicked = YES; } 

或者,您可以将左栏button项目添加到导航栏,并为其设置自己的select器function。

在迅速3.1

 override func viewDidLoad() { // set navigationItem.leftBarButtonItem return to Root let backToRootVCButton = UIBarButtonItem.init(title: "Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(backToRootVCAction)) self.navigationItem.setLeftBarButton(backToRootVCButton, animated: true) 

}

 func backToRootVCAction() { _ = self.navigationController?.popToRootViewController(animated: true) }