使用过导航控制器的人都知道,当跳转到下一个界面之后,在导航栏的左边会有默认的返回上一个界面的按钮和文字(系统默认的蓝色样式),需要设置为自己想要的样式的时候可以通过自定义导航栏返回按钮来实现
步骤
- 在自己的导航栏控制器里面重写
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
实现对返回按钮的自定义 - 设置好返回按钮的样式
- 添加点击事件
- 隐藏底部的tabbar
- 重写super方法
示例代码
/**
* 可以在这个方中拦截所有push进来的控制器
*/
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
// 设置返回按钮的样式
if (self.childViewControllers.count > 0) { // 如果push进来的不是第一个控制器
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitle:@"返回" forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"navigationButtonReturn"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"navigationButtonReturnClick"] forState:UIControlStateHighlighted];
button.size = CGSizeMake(70, 30);
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; // 让按钮内部的内容左对齐
button.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
// 为按钮添加点击事件
[button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button];
// 隐藏底部的tabbar
viewController.hidesBottomBarWhenPushed = YES;
}
// 将这个super的push放在最后面,让viewController可以覆盖上面设置的leftBarButtonItem
[super pushViewController:viewController animated:animated];
}
/**
* 按钮的点击事件
*/
- (void)back{
//控制器跳转回去
[self popViewControllerAnimated:YES];
}
注意点
- 要将push写在按钮创建的后面,实现覆盖
- 如果滑动移除控制器的功能失效,那么可以在viewDidLoad方法里面清空代理
- (void)viewDidLoad {
[super viewDidLoad];
self.interactivePopGestureRecognizer.delegate = nil;
}