在 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中的UIStatusBarStyle?