方法一 : 在 NavigationController 中, 重写父类的push方法
/**
* 拦截所有push进来的子控制器
* @param viewController 每一次push进来的子控制器
*/
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
// if (不是第一个push进来的子控制器) {
if (self.childViewControllers.count >= 1) {
// 左上角的返回
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setTitle:@"返回" forState:UIControlStateNormal];
[backButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[backButton setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
[backButton setImage:[UIImage imageNamed:@"navigationButtonReturn"] forState:UIControlStateNormal];
[backButton setImage:[UIImage imageNamed:@"navigationButtonReturnClick"] forState:UIControlStateHighlighted];
[backButton sizeToFit];
[backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
backButton.contentEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0);
viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
viewController.hidesBottomBarWhenPushed = YES; // 隐藏底部的工具条
}
// super的push方法一定要写到最后面
// 一旦调用super的pushViewController方法,就会创建子控制器viewController的view
// 也就会调用viewController的viewDidLoad方法
[super pushViewController:viewController animated:animated];
}
- (void)back
{
[self popViewControllerAnimated:YES];
}
方法二 : 在BaseViewController 中, 写一个 - (void)setupNavigationwithTitle:(NSString *)title;
方法, 然后, 在需要 "返回" 按钮的页面, 调用此方法.
/**
* 设置navigationbar的title(同时还默认的包含有设置返回按钮为黑色)
*
* @param title title的内容
*/
- (void)setupNavigationwithTitle:(NSString *)title;
- (void)setupNavigationwithTitle:(NSString *)title {
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
backBtn.frame = CGRectMake(0.0, 0.0, 80.0, 40.0);
UIImageView *backImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"back_black"]];
backImg.frame = CGRectMake(-14.0, 2.0, 30.0, 40.0);
[backBtn addSubview:backImg];
UILabel *backLabel = [[UILabel alloc]init];
backLabel.text = @"返回";
backLabel.textColor = [UIColor whiteColor];
backLabel.font = [UIFont systemFontWithSize:16.0f];
backLabel.frame = CGRectMake(10, 2.0, 40, 40);
[backBtn addSubview:backLabel];
[backBtn addTarget:self
action:@selector(btnItemClick)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
[self.navigationItem setLeftBarButtonItem:leftButton];
self.title = title;
}
- (void)btnItemClick
{
[self.navigationController popViewControllerAnimated:YES];
}