在 ios 6/ios 7 兼容应用程序中更改导航返回按钮操作

Posted

技术标签:

【中文标题】在 ios 6/ios 7 兼容应用程序中更改导航返回按钮操作【英文标题】:Changing Navigatiobar back button action in ios6/ ios 7 compatible applications 【发布时间】:2014-01-22 07:25:41 【问题描述】:

我有一个导航控制器应用程序,我需要为导航返回栏按钮设置自定义操作。尝试了一些变通方法,但尚未找到解决方案。

试过了

  UIBarButtonItem *backBarItem  = self.navigationItem.leftBarButtonItem;
  backBarItem.target = self;
  backBarItem.action = @selector(popToHomeViewController);

结果:没有效果。后退按钮弹出到导航堆栈中的前一个 viewController

  UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:backBarItem.title style:backBarItem.style target:self action:@selector(popViewController)];
  self.navigationItem.leftBarButtonItem = customBarItem;

结果:没有效果。后退按钮弹出到导航堆栈中的前一个 viewController

  UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:@"back" style:backBarItem.style target:self action:@selector(popViewController)];
  self.navigationItem.leftBarButtonItem = customBarItem;

结果:现在我的选择器被完美地调用并导航到所需的 viewController。这里的问题是后退按钮不像原生后退按钮。它没有粗体的“

有没有更好的解决方案来确保带有自定义选择器的 ios 6 和 ios 7 兼容导航返回按钮?

【问题讨论】:

仅供参考,后退按钮中的“ 是的。那么我们如何在自定义时实现该样式,该样式在 ios 6 和 ios 7 中作为其原生的后退栏按钮出现 【参考方案1】:

试试这个简单的例子会帮助你..

- (void)viewDidLoad 
    [super viewDidLoad];
UIImage *buttonImage = [UIImage imageNamed:@"back.png"];

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

[button setImage:buttonImage forState:UIControlStateNormal];


button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);

 [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];

self.navigationItem.leftBarButtonItem = customBarItem;
[customBarItem release];


-(void)back 

[self.navigationController popViewControllerAnimated:YES];

确保在资源文件夹中有一个导航栏后退按钮大小的按钮图像,名称为 back.png

如果需要任何其他帮助,请随时联系。

编码愉快!!!!!!

【讨论】:

【参考方案2】:

试试这个

viewController.navigationItem.hidesBackButton = YES;
//set custom image to button if needed
UIImage *backButtonImage = [UIImage imageNamed:@"back"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:backButtonImage forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
[button addTarget:viewController action:@selector(back) forControlEvents:UIControlEventTouchUpInside];

UIView *backButtonView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height)];
[backButtonView addSubview:button];

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:backButtonView];
viewController.navigationItem.leftBarButtonItem = customBarItem;

back 方法中你可以自定义

- (void)back 
    //Your code

【讨论】:

我们需要添加两张图片,在这种情况下,一张用于ios 6,一张用于ios 7,如果操作系统再次更改其后退按钮样式,它看起来很奇怪吧? 如何使用UINavigationcontroller- (void)viewWillDisappear:(BOOL)animated- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 委托方法来更改后退按钮操作..?

以上是关于在 ios 6/ios 7 兼容应用程序中更改导航返回按钮操作的主要内容,如果未能解决你的问题,请参考以下文章

导航栏 tintColor 在 iOS 6 应用程序的 iOS 7 兼容模式下不受尊重?

在 iOS 7 中更改后退按钮会禁用滑动导航

在 iOS 7 中更新导航栏而不更改视图

如何使用导航栏在模态视图中更改iOS 7中的UIStatusBarStyle?

ios 6 ios 7 xcode 4.6 xcode5 困境

iOS 7导航栏后退按钮标题在语言更改时更改