将目标添加到navigationBar中的库存后退按钮

我在UINavigationBar设置标题和后退按钮的值,如下所示:

 self.navigationItem.title = @"Post"; [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [[UIColor blueColor] colorWithAlphaComponent:0.75f], NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue" size:20]}]; [self.navigationController.navigationBar.backItem setTitle:@"Pop Pop !"]; 

但是我无法在后退按钮上添加目标。 我尝试过以下方法:

 [self.navigationItem.backBarButtonItem setTarget:self]; [self.navigationItem.backBarButtonItem setAction:@selector(goBack:)]; 

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

但是弹出viewController时没有调用我的选择器。

在此处输入图像描述

如何将目标添加到backButton,或者在弹出viewController时调用选择器? (我已经尝试了SO中提到的所有可能的解决方案,徒劳无功)

编辑:我宁愿编辑股票backButton的行为,而不是设置自定义按钮作为backButton。

我有两个解决方案,您无法在后退按钮中添加目标或操作:

1-添加一个新的barButtonItem并将其调用,然后将选择器添加到它,并将其放在navigationItem.leftBarButtonItem中。 不要忘记流行!

2-覆盖viewWillDisAppear方法,并做你想做的任何事情..如果你的viewcontroller没有引导你到另一个viewcontroller但前一个…

如果您还有其他问题,请询问(Y)

你不能将目标添加到股票BackButton,但你可以覆盖CustomNavigationController中的UINavigationBarDelegate方法,如下所示:

 class CustomNavigationController: UINavigationController { @IBOutlet weak var ibNavigationBar: UINavigationBar! override func viewDidLoad() { super.viewDidLoad() ibNavigationBar.delegate = self } } extension CustomNavigationController: UINavigationBarDelegate { func navigationBar(navigationBar: UINavigationBar, shouldPopItem item: UINavigationItem) -> Bool { for viewController in viewControllers { if viewController.title == "YourTitledViewController" { popToViewController(viewController, animated: true) } } return false } } 

您无法以这种方式更改backBarButtonItem操作。

我在这看到2个可能的解决方案

  1. 要实现自定义后退按钮,请执行任何操作

  2. 这里有一个很好的解决方案,如何覆盖标准回事件并在需要时阻止popViewController

https://github.com/onegray/UIViewController-BackButtonHandler/tree/master

哟无法添加目标到后退按钮。 您可以向其添加leftbarbutton项和addtarget。

  UIBarButtonItem *tmpButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backAction:)]; self.navigationItem.leftBarButtonItem = tmpButtonItem; 

首先隐藏后退按钮

self.navigationItem.hidesBackButton = YES;

然后你制作自定义按钮

  UIButton *leftbarButton = [UIButton buttonWithType:UIButtonTypeCustom]; leftbarButton.frame =CGRectMake(70, 3, 65, 32); [leftbarButton setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal]; [leftbarButton addTarget:self action:@selector(leftbarbuttonclick) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *newdbutton =[[UIBarButtonItem alloc] leftbarButton]; 

并将其添加到导航左栏按钮项目

 self.navigationItem.leftBarButtonItem =newbutton; 

现在添加操作

 -(void)leftbarbuttonclick { // Your code } 

脱离我的头顶。 尝试这样的事情

 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(goBack:)]; tap.numberOfTapsRequired = 1; [self.navigationItem.backBarButtonItem addGestureRecognizer:tap];