自定义导航栏上的返回按钮
自定义导航栏上的返回按钮
在我的应用程序中,有许多带有UINavigationControllers的UIViewControllers。在UINavigationBar上必须有一个“返回”按钮和一个“首页”UIButton。所有这些都可以正常工作。
但是,我的一些UIViewControllers的名称很长,有时候剩下的空间太小了。我试图用自定义的“返回”替换原来的“返回”按钮标签(显示上一个视图的标题),但无论我尝试什么都不起作用:
// 标题没有改变
[self.navigationItem.backBarButtonItem setTitle:@"返回"];
// 操作未设置,按钮没有响应(按钮什么也没做)
[self.navigationItem.leftBarButtonItem
setAction:self.navigationItem.backBarButtonItem.action];
而且我需要“返回”按钮的样式像这个问题中的样式:在iPhone导航栏上绘制自定义的返回按钮
问题出现的原因:
在导航栏上自定义返回按钮的目标是将所有的返回按钮都改为白色图标。但是在iOS 7.0及以上版本和7.0以下版本中,对应的实现方法有所不同。
解决方法:
1. 在AppDelegate的"didFinishLaunchingWithOptions"方法中,根据不同的系统版本设置导航栏的样式。如果系统版本大于等于7.0,则设置导航栏的tintColor为白色,backIndicatorImage和backIndicatorTransitionMaskImage为自定义的图标;如果系统版本小于7.0,则设置UIBarButtonItem的背景图和标题位置调整。
2. 在通用的父ViewController类的"viewDidLoad"方法中,根据不同的系统版本设置返回按钮的样式。如果系统版本大于等于7.0,则创建一个没有标题的UIBarButtonItem,并将其设置为导航栏的返回按钮;如果系统版本小于7.0,则不做任何操作。
问题:为什么我不能在自定义的返回按钮中添加标题?
原因:这个问题的解决方法是使用"leftBarButtonItem"而不是自定义的返回按钮,所以无法通过简单地添加标题来实现。
解决方法:
以下是一个可以实现的方法:
在资源文件夹中,确保存在一个与导航栏返回按钮大小相同的按钮图片,命名为"back.png"。
然后,可以尝试以下代码:
- (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:(back) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button]; self.navigationItem.leftBarButtonItem = customBarItem; [customBarItem release]; } - (void)back { [self.navigationController popViewControllerAnimated:YES]; }
这段代码将创建一个自定义的返回按钮,并将其添加到导航栏的左侧。
然而,这种方法不能直接添加标题到自定义的返回按钮。原因是,这种方法只是添加了一个"leftBarButtonItem",而不是真正自定义返回按钮。
希望对你有所帮助。如果还有其他问题,请随时询问。