将目标添加到导航栏中的库存返回按钮

Posted

技术标签:

【中文标题】将目标添加到导航栏中的库存返回按钮【英文标题】:Add target to stock back button in navigationBar 【发布时间】:2013-11-19 07:02:18 【问题描述】:

我在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】:

您不能将目标添加到股票 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
    

【讨论】:

【参考方案2】:

我有两个解决方案给你,因为你不能在你的后退按钮上添加目标或动作:

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

2- 覆盖 viewWillDisAppear 方法,并在那里做任何你想做的事情。如果你的视图控制器没有将你引导到另一个视图控制器,而是前一个......

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

【讨论】:

【参考方案3】:

您不能以这种方式更改backBarButtonItem 操作。

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

    要实现自定义后退按钮,可以随心所欲地操作

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

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

【讨论】:

【参考方案4】:

你不能将目标添加到后退按钮。您可以添加 leftbarbutton 项目并为其添加目标。

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

【讨论】:

【参考方案5】:

隐藏后退按钮的第一个

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

【讨论】:

【参考方案6】:

在我的头顶上。试试这样的

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

【讨论】:

以上是关于将目标添加到导航栏中的库存返回按钮的主要内容,如果未能解决你的问题,请参考以下文章

在导航栏中自动添加“返回”按钮

如何在导航栏中添加返回按钮?

标签栏导航栏中的后退按钮

单击导航栏中的“返回”按钮时如何设置自定义视图控制器?

按下导航栏中的后退按钮并弹出视图B后更新视图B后面的视图A.

如何在底部应用栏中使用后退按钮实现导航。安卓